javascript设计模式Constructor(构造器)模式


Posted in Javascript onAugust 19, 2016

Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。Object构造器用于创建特定类型的对象?准备好对象以备使用,同事接收构造器可以使用参数,以在第一次创建对象时,设置成员属性和方法值。

对象创建
创新新对象,在javascript中通常有两种方法:
 1.对象直面量方法
var newObj = {};

 2.构造器的简洁方法
var newObj = new Object();
在Object构造器为特定的值创建对象封装,或者没有传递值时,它将创建一个肯那个对象并返回

 对象赋值的方法:
 1.“点”方法

//设置属性
newObj.name = 'LanFeng';
//获取值
var user= newObj.name;

 1.中括号方法

//设置属性
newObj["name"]= 'LanFeng';
//获取值
var user= newObj["name"];

 1.Object.defineProperty (适用ECMAScript5)

//设置属性
Object.defineProperty(newObj,"name",{
  value:"LanFeng",
  writable:true,
  enumerable:true,
  configurable:true
})

 1.Object.defineProperties

//设置属性
 Object.defineProperties(newObj,{
   "someKey":{
    value:"Hello Js",
     writable:true
  },
  "anotherKey":{
    value:"Foo bar",
    writable:false
  }
})

Javascript不支持类的概念,但它确实支持与对象一起用的特殊constructor函数,通过在构造器前面加new关键字,告诉js像使用构造器一样实例化一个新对象,并且对象成员由该函数定义。
在构造器内,关键字this引用新创建的对象。回顾对象创建,基本的构造器:

function Car(model,year,miles){
  this.model = model;
  this.year = year;
  this.miles = miles;
  this.toString = function(){
  return this.model + "has done" + this.miles +"miles";
  }
}
//创建实例化对象

var civio = new Car("Honda Civio",2009,20000);

var mondeo= new Car("Ford Mondeo",2009,5000);

上面例子是一个简单的构造器模式版本,但它确实存在一些问题,其中一个问题是,它使用继承变得困难,另外一个问题是,toString()这样的函数是为每个使用Car构造器创建的新对象而分别重新定义的,这个不是最理想的,因为这种函数应该在所有的Car类型实例直接共享。

javascript中有有一个prototype的属性,调用js构造器创建一个对象后,新对象就会具有构造器原型的所有属性,通过这种方式,可以创建多个对象,并访问相同的原型,实现方法共享。

function Car(model,year,miles){
  this.model = model;
  this.year = year;
  this.miles = miles;

}


//原型函数
Car.prototype.toString = function(){
  return this.model + "has done" + this.miles +"miles";
  }

//创建实例化对象

var civio = new Car("Honda Civio",2009,20000);
var mondeo= new Car("Ford Mondeo",2009,5000);
console.log(civio.toString())
console.log(mondeo.toString())

现在toString()的单一实例就能够在所有Car对着之间共享。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 编程引入命名空间的方法与代码
Aug 13 Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
JavaScript实现的简单烟花特效代码
Oct 20 Javascript
JavaScript Length 属性的总结
Nov 02 Javascript
深入理解JavaScript中的尾调用(Tail Call)
Feb 07 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
jQuery上传多张图片带进度条样式(DEMO)
Mar 02 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
Jun 08 Javascript
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
基于JS实现web端录音与播放功能
Apr 17 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
Aug 15 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 #Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 #Javascript
AngularJS入门教程之更多模板详解
Aug 19 #Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 #Javascript
JS获取当前页面名称的简单实例
Aug 19 #Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 #Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
Aug 19 #Javascript
You might like
实现“上一页”和“下一页按钮
2006/10/09 PHP
一个数据采集类
2007/02/14 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
php获取远程文件大小
2015/10/20 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
用javascript实现点击链接弹出"图片另存为"而不是直接打开
2007/08/15 Javascript
javascript 关闭IE6、IE7
2009/06/01 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
应届生煤化工求职信
2013/10/21 职场文书
《满井游记》教学反思
2014/02/26 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
暑假安全保证书
2015/02/28 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL