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 相关文章推荐
jQuery autocomplete插件修改
Apr 17 Javascript
javascript new 需不需要继续使用
Jul 02 Javascript
JS实现可改变列宽的table实例
Jul 02 Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 Javascript
node.js中fs.stat与fs.fstat的区别详解
Jun 01 Javascript
详解vue.js下引入百度地图jsApi的两种方法
Jul 27 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
Apr 14 Javascript
浅谈JS中this在各个场景下的指向
Aug 14 Javascript
javascript中正则表达式语法详解
Aug 07 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
详解Python中的Cookie模块使用
2015/07/06 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
园林设计师自荐信
2013/11/18 职场文书
培训专员岗位职责
2014/02/26 职场文书
北京奥运会主题口号
2014/06/13 职场文书
五年级语文教学反思
2016/03/03 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android