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 格式化时间日期函数小结
Mar 20 Javascript
尝试在让script的type属性等于text/html
Jan 15 Javascript
js实现在同一窗口浏览图片
Sep 17 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
原生js配合cookie制作保存路径的拖拽
Dec 29 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
解决angularjs中同步执行http请求的方法
Aug 13 Javascript
bootstrap table表格插件之服务器端分页实例代码
Sep 12 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
Oct 30 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
js canvas实现星空连线背景特效
Nov 01 Javascript
探索浏览器页面关闭window.close()的使用详解
Aug 21 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
汉字转化为拼音(php版)
2006/10/09 PHP
php 无法载入mysql扩展
2010/03/12 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
php格式文件打开的四种方法
2018/02/24 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
js实现一个简易计算器
2020/03/30 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
通过cmd进入python的实例操作
2019/06/26 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
为什么会有内存对齐
2016/10/10 面试题
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
医院病假条范文
2015/08/17 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript