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 相关文章推荐
改善你的jQuery的25个步骤 千倍级效率提升
Feb 11 Javascript
jQuery最佳实践完整篇
Aug 20 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
Apr 11 Javascript
JS函数this的用法实例分析
Feb 05 Javascript
使用vue.js制作分页组件
Jun 27 Javascript
javaScript事件机制兼容【详细整理】
Jul 23 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
浅谈对于react-thunk中间件的简单理解
May 01 Javascript
JavaScript创建、读取和删除cookie
Sep 03 Javascript
解决vue中provide inject的响应式监听
Apr 19 Vue.js
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下网站防IP攻击代码,超级实用
2010/10/24 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
javascript canvas API内容整理
2020/02/16 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
Python原始字符串(raw strings)用法实例
2014/10/13 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
微信小程序python用户认证的实现
2019/07/29 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
python 如何调用 dubbo 接口
2020/09/24 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
房地产销售计划书
2014/01/10 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
体育教师个人工作总结
2015/02/09 职场文书
2016年教师新年寄语
2015/08/18 职场文书