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 XML实现两级级联下拉列表
Nov 10 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
Jan 15 Javascript
异步加载script的代码
Jan 12 Javascript
jQuery采用连缀写法实现的折叠菜单效果
Sep 18 Javascript
javascript创建cookie、读取cookie
Mar 31 Javascript
Bootstrap三种表单布局的使用方法
Jun 21 Javascript
jQuery动态改变多行文本框高度的方法
Sep 07 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
利用nginx + node在阿里云部署https的步骤详解
Dec 19 Javascript
vue 过滤器filter实例详解
Mar 14 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
Mar 06 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python3实现猜数字游戏
2020/12/07 Python
深入了解python中元类的相关知识
2019/08/29 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
python中doctest库实例用法
2020/12/31 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
《忆江南》教学反思
2014/04/07 职场文书
雾霾停课通知
2015/04/24 职场文书
单位介绍信格式范文
2015/05/04 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python