Javascript之面向对象--封装


Posted in Javascript onDecember 02, 2016

第一步:做一个“手机的类"

var MobilePhone = (function(){

…………
})()

第二步:考虑这个类,里需要那些类的私有属性,这里我想定义的是实例出来手机的数量

var MobilePhone = (function(){
 //私有属性
 var count = 0; //代表手机的数量
})()

第三步:创建一个构造函数,即实例时候,对产生的新象的一个初始化,例如属性,方法的初始化;在这个例子中,每一个手机都会有颜色,大小,价格属性.这里的构造函数也是一个闭包,所以可以访问count,并且count的值会长期保存在内存中(只要有引用存在)

var MobilePhone = (function(){
 //私有属性
 var count = 0; //代表手机的数量 
 
//构造函数
 

var creatphone = function(color,size,price){
 



count++;
 



this._color = color; //手机的颜色
 



this._size = size; //手机的大小
 



this._price = price; //手机的价格
 



this.index = count; //手机索引,是第几台创建的手机手象
 

 }
})()

第四步:共有方法:

即所有实例出来的手机对象,都能使用的方法,这里手机应该可以改变价格,颜色,大小,也可以显示大小,颜色,价格。

这里的共有方法应该放在“原型对象”中:

1.所有通过该构造函数实例的对象,也就是造出的手机,都能使用“原型对象”中的方法。

2.如果放在构造函数中,那么每一次实例一个手机对象出来,都会产生一堆重复的方法,占用内存。

3."constructor":creatphone解释:

因为creatphone.prototype ={……}相当对把之前的原型对象的引用,给复盖掉了。而为了让原型对象和该构造函数关联起来 设置了"constructor":creatphone,这个属性.

var MobilePhone = (function(){
 //私有属性
 var count = 0;//代表手机的数量

//构造函数


 var creatphone = function(color,size,price){




count++;




this._color = color; //手机的颜色




this._size = size; //手机的大小




this._price = price; //手机的价格




this.index = count; //手机索引,是第几台创建的手机手象
  

}
 //公有方法,存放在原型对象中 
 creatphone.prototype = { 



"constructor":creatphone,



//获取手机颜色
  "getColor" : function(){
  return this._color; 
  },



//设置手机颜色
  "setColor" : function(color){
  this._color = color;
  },



//获取手机大小
  "getSize" : function(){
  return "width:"+this._size.width + " height:" + this._size.height; 
  },



//设置手机大小
  "setSize" : function(size){
  this._size.width = size.width;
  this._size.height = size.height;
  },



//获取手机价格
  "getPrice" : function(){
  return this._price;
  },



//设置手机价格
  "setPrice" : function(price){
  this._price = price
  } 
 }
})()

第五步:特权方法,即需要有一个方法,能够去访问类的私有变量。就是实例出来多少台手机对象

var MobilePhone = (function(){
 //私有属性
 var count = 0;//代表手机的数量
 var index = 0;//代表手机的索引
 
//构造函数
 

var creatphone = function(color,size,price){
 



count++;
 



this._color = color; //手机的颜色
 



this._size = size; //手机的大小
 



this._price = price; //手机的价格
 



this.index = count; //手机索引,是第几台创建的手机手象
 


}


 //公有方法,存放在原型对象中
 creatphone.prototype = {
  "constructor":creatphone,
  "getColor" : function(){
  return this._color; 
  },
  "setColor" : function(color){
  this._color = color;
  },
  "getSize" : function(){
  return "width:"+this._size.width + " height:" + this._size.height; 
  },
  "setSize" : function(size){
  this._size.width = size.width;
  this._size.height = size.height;
  },
  "getPrice" : function(){
  return this._price;
  },
  "setPrice" : function(price){
  this._price = price
  } 
 }
 //特权方法
 creatphone.get_count_index = function(){
  return count
 }
 return creatphone;
})()

用上面封装的一个手机类 测试

var anycall = new MobilePhone(); //实例一个三星手机对象
var HTC = new MobilePhone(); //实例一个HTC手机对象
var Iphone4s = new MobilePhone(); //实例一个苹果4S手机对象
console.log("三星是第:"+anycall.index+"台"); //FF的控制台输出三星手机对象是第几台创建的,即索引;
console.log("HTC是第:"+HTC.index+"台"); //FF的控制台输出HTC手机对象是第几台创建的,即索引;
console.log("Iphone4s是第:"+Iphone4s.index+"台");  //FF的控制台输出个苹果4S手机对象是第几台创建的,即索引;
console.log("总共造出了"+MobilePhone.get_count_index()+"手机"); //FF的控制台输出总共创建了几台手机;
console.log(anycall.constructor === MobilePhone); //实例出来的对象,的原形象中的constructor,是否还指向MobilePhone

 结果如下,全完正确:

Javascript之面向对象--封装

以上就是本文的全部内容,希望对大家有所帮助,感兴趣的朋友可以看下《Javascript之面向对象--方法》谢谢对三水点靠木的支持!

Javascript 相关文章推荐
js模拟弹出效果代码修正版
Aug 07 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
Jun 10 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
javascript 闭包详解及简单实例应用
Dec 31 Javascript
通俗解释JavaScript正则表达式快速记忆
Aug 23 Javascript
js实现图片粘贴上传到服务器并展示的实例
Nov 08 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 Javascript
node.js express框架简介与实现
Jul 23 Javascript
vue.config.js常用配置详解
Nov 14 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
Mar 17 Javascript
JavaScript制作弹出层效果
Dec 02 #Javascript
Javascript之面向对象--方法
Dec 02 #Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 #Javascript
Vue.js组件tree实现省市多级联动
Dec 02 #Javascript
Vue2实现组件props双向绑定
Dec 02 #Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 #Javascript
基于jQuery实现表格的排序
Dec 02 #Javascript
You might like
PHP 中文处理技巧
2010/04/25 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
基于php实现的验证码小程序
2016/12/13 PHP
JavaScript Eval 函数使用
2010/03/23 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
详解Python中的相对导入和绝对导入
2017/01/06 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
python安装后的目录在哪里
2020/06/21 Python
python 通过exifread读取照片信息
2020/12/24 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
机械工程师的岗位职责
2013/11/17 职场文书
禁烟标语大全
2014/06/11 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
团委副书记工作总结
2015/08/14 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript