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设计模式-Constructor(构造器)模式相关推荐

  1. JavaScript设计模式之构造器、模块和原型

    JavaScript面向对象 JavaScript是一种无类语言,但可以使用函数来模拟,这就涉及到设计模式.模式是一种已经验证过的可复用的解决方案,可用于解决软件设计中遇到的常见的问题,通常将这些解决 ...

  2. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  3. Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之代理模式[讲师辅导]-969人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  4. Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之外观模式[讲师辅导]-770人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  5. JavaScript设计模式-享元模式

    JavaScript设计模式-享元模式 概念 例子 内部状态与外部状态 享元模式的通用结构 例子 总结 github仓库地址:点击 [设计模式例子](https://github.com/fanhua ...

  6. java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...

  7. JavaScript设计模式总结-组合模式

    使用场景 1.对象存在整体-部分的结构,如树.数组等: 2.使用者希望对数据结构中的所有对象统一处理. 需要注意的是 1.组合模式所谓的结构并非"继承",而是"包含&qu ...

  8. Javascript设计模式之——代理模式

    最近在读<javascript设计模式与开发实践>,在这里把文中的各种设计模式写出来,以便加深记忆,也可以分享给初学者.如果你不了解设计模式,那么强烈推荐你阅读一下这本书,相信它可以颠覆你 ...

  9. JavaScript设计模式之策略模式(学习笔记)

    在网上搜索"为什么MVC不是一种设计模式呢?"其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composi ...

最新文章

  1. model.fit以及model.fit_generator区别及用法
  2. 使用SQL语句UPDATE数据,怎样知道是否UPDATE成功
  3. Python基础(9)水仙花数
  4. CentOS 6.7 配置 yum 安装 nginx
  5. dva.js在index。tsx中获取script标签引用的文件
  6. Gooogle Test中的TEST()宏代码分析
  7. GameMaker Studio 之中的攻击与受击判定盒
  8. Spring 梳理 - @Component
  9. html中电子邮件怎么写,谈html mailto(电子邮件)实际应用
  10. 使用template.js加载后端数据
  11. MySQL性能优化-根据执行计划进行性能优化
  12. 机器学习算法基础8-Nagel-Schreckenberg交通流模型-公路堵车概率模型
  13. Light oj 1233 - Coin Change (III) (背包优化)
  14. 怎样用python控制别人的电脑_python实现远程控制电脑
  15. 抖音无水印视频批量下载助手
  16. Unity实现音频播放器[QQ音乐,网易云等效果]
  17. 从事大数据行业5年,峰哥总结出了以下 7 条建议
  18. 如何用GoldWave中文版提取伴奏?
  19. 小白学习图像处理——分水岭算法
  20. TX2/Linux下can总线的接收与发送详解!(回环测试)

热门文章

  1. c语言单链表超市出库,c语言-单链表(二)
  2. MySQL日志的类型和实现方法_mysql的日志类型及作用
  3. 信安精品课:2020年软考信息安全工程师备考公开课
  4. Python适合自己的IDE才是最好的IDE
  5. 2 snippets vue 修改配置_VsCode从零开始配置一个属于自己的Vue开发环境
  6. 华为新系统鸿蒙有哪些手机_如今鸿蒙手机之后,华为启用新系统,谷歌微软措手不及...
  7. Turtlebot2 环境配置
  8. yum 找不到程序,yum更换国内阿里源
  9. springMVC接收请求参数的几种方式
  10. Javascript 之 变量