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 类型转换方法
Oct 24 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
Aug 15 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
Jan 29 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
微信小程序实战之轮播图(3)
Apr 17 Javascript
JS随机排序数组实现方法分析
Oct 11 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
Mar 05 Javascript
关于js对textarea换行符的处理方法浅析
Aug 03 Javascript
Nuxt.js之自动路由原理的实现方法
Nov 21 Javascript
微信小程序日历组件使用方法详解
Dec 29 Javascript
微信小程序实现弹出菜单动画
Jun 21 Javascript
vue中使用element组件时事件想要传递其他参数的问题
Sep 18 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 session机制
2011/07/17 PHP
php 生成短网址原理及代码
2014/01/23 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Python中文字符串截取问题
2015/06/15 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python如何生成网页验证码
2018/07/28 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python 标准差计算的实现(std)
2019/07/29 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
初中军训感想300字
2014/03/05 职场文书
庆七一宣传标语
2014/10/08 职场文书
教育合作协议范本
2014/10/17 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
2014年管理工作总结
2014/11/22 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
修辞手法有哪些?
2019/08/29 职场文书
Django实现翻页的示例代码
2021/05/24 Python