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 相关文章推荐
JS option location 页面跳转实现代码
Dec 27 Javascript
Javascript中拼接大量字符串的方法
Feb 05 Javascript
javascript中几个容易混淆的概念总结
Apr 14 Javascript
在JavaScript中使用NaN值的方法
Jun 05 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
Nov 10 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
Aug 03 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
Vue实现导出excel表格功能
Mar 30 Javascript
vue 实现通过手机发送短信验证码注册功能
Apr 19 Javascript
jQuery实现模糊查询的方法分析
May 10 jQuery
vue获取data数据改变前后的值方法
Nov 07 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
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
Python Socket编程入门教程
2014/07/11 Python
Python用GET方法上传文件
2015/03/10 Python
Python实现的弹球小游戏示例
2017/08/01 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
Python高级property属性用法实例分析
2019/11/19 Python
python获取array中指定元素的示例
2019/11/26 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
销售文员的岗位职责
2013/11/20 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
2015年教师国培感言
2015/08/01 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python