javascript设计模式-Constructor(构造器)模式
Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。Object构造器用于创建特定类型的对象–准备好对象以备使用,同事接收构造器可以使用参数,以在第一次创建对象时,设置成员属性和方法值。
对象创建
创新新对象,在javascript中通常有两种方法:
对象直面量方法
var newObj = {};构造器的简洁方法
var newObj = new Object();
在Object构造器为特定的值创建对象封装,或者没有传递值时,它将创建一个肯那个对象并返回
对象赋值的方法:
- “点”方法
//设置属性
newObj.name = 'LanFeng';
//获取值
var user= newObj.name;
- 中括号方法
//设置属性
newObj["name"]= 'LanFeng';
//获取值
var user= newObj["name"];
- Object.defineProperty (适用ECMAScript5)
//设置属性
Object.defineProperty(newObj,"name",{value:"LanFeng",writable:true,enumerable:true,configurable:true
})
- 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(构造器)模式相关推荐
- JavaScript设计模式之构造器、模块和原型
JavaScript面向对象 JavaScript是一种无类语言,但可以使用函数来模拟,这就涉及到设计模式.模式是一种已经验证过的可复用的解决方案,可用于解决软件设计中遇到的常见的问题,通常将这些解决 ...
- JavaScript设计模式--简单工厂模式例子---XHR工厂
JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...
- Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程
Javascript 设计模式之代理模式[讲师辅导]-969人已学习 课程介绍 随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...
- Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程
Javascript 设计模式之外观模式[讲师辅导]-770人已学习 课程介绍 随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...
- JavaScript设计模式-享元模式
JavaScript设计模式-享元模式 概念 例子 内部状态与外部状态 享元模式的通用结构 例子 总结 github仓库地址:点击 [设计模式例子](https://github.com/fanhua ...
- java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...
- JavaScript设计模式总结-组合模式
使用场景 1.对象存在整体-部分的结构,如树.数组等: 2.使用者希望对数据结构中的所有对象统一处理. 需要注意的是 1.组合模式所谓的结构并非"继承",而是"包含&qu ...
- Javascript设计模式之——代理模式
最近在读<javascript设计模式与开发实践>,在这里把文中的各种设计模式写出来,以便加深记忆,也可以分享给初学者.如果你不了解设计模式,那么强烈推荐你阅读一下这本书,相信它可以颠覆你 ...
- JavaScript设计模式之策略模式(学习笔记)
在网上搜索"为什么MVC不是一种设计模式呢?"其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composi ...
最新文章
- model.fit以及model.fit_generator区别及用法
- 使用SQL语句UPDATE数据,怎样知道是否UPDATE成功
- Python基础(9)水仙花数
- CentOS 6.7 配置 yum 安装 nginx
- dva.js在index。tsx中获取script标签引用的文件
- Gooogle Test中的TEST()宏代码分析
- GameMaker Studio 之中的攻击与受击判定盒
- Spring 梳理 - @Component
- html中电子邮件怎么写,谈html mailto(电子邮件)实际应用
- 使用template.js加载后端数据
- MySQL性能优化-根据执行计划进行性能优化
- 机器学习算法基础8-Nagel-Schreckenberg交通流模型-公路堵车概率模型
- Light oj 1233 - Coin Change (III) (背包优化)
- 怎样用python控制别人的电脑_python实现远程控制电脑
- 抖音无水印视频批量下载助手
- Unity实现音频播放器[QQ音乐,网易云等效果]
- 从事大数据行业5年,峰哥总结出了以下 7 条建议
- 如何用GoldWave中文版提取伴奏?
- 小白学习图像处理——分水岭算法
- TX2/Linux下can总线的接收与发送详解!(回环测试)
热门文章
- c语言单链表超市出库,c语言-单链表(二)
- MySQL日志的类型和实现方法_mysql的日志类型及作用
- 信安精品课:2020年软考信息安全工程师备考公开课
- Python适合自己的IDE才是最好的IDE
- 2 snippets vue 修改配置_VsCode从零开始配置一个属于自己的Vue开发环境
- 华为新系统鸿蒙有哪些手机_如今鸿蒙手机之后,华为启用新系统,谷歌微软措手不及...
- Turtlebot2 环境配置
- yum 找不到程序,yum更换国内阿里源
- springMVC接收请求参数的几种方式
- Javascript 之 变量