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 相关文章推荐
JavaScript 学习笔记(七)字符串的连接
Dec 31 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
javascript验证邮件地址和MX记录的方法
Jun 16 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
Apr 01 Javascript
Javascript+CSS3实现进度条效果
Oct 28 Javascript
AngularJS实现controller控制器间共享数据的方法示例
Oct 30 Javascript
利用Angular2的Observables实现交互控制的方法
Dec 27 Javascript
JavaScript中import用法总结
Jan 20 Javascript
angular2 NgModel模块的具体使用方法
Apr 10 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
Jan 03 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
如何利用JavaScript实现二叉搜索树
Apr 02 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
关于python多重赋值的小问题
2019/04/17 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
python机器学习库xgboost的使用
2020/01/20 Python
详解Python中namedtuple的使用
2020/04/27 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
资产评估专业大学生求职信
2013/09/29 职场文书
室内设计自我鉴定
2013/10/15 职场文书
自荐信如何“自荐”
2013/10/24 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
协议书范文
2015/01/27 职场文书
英语演讲开场白
2015/05/29 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
Java无向树分析 实现最小高度树
2022/04/09 Javascript
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android