应用此模式可以让每个实例都邑有本身的一份实例属性副本,但同时又共享着对办法的引用
如许的话,即使实例属性修改引用类型的值,也不会影响其他实例的属性值了
- function Person(name) {
- this.name = name
- this.friends = ['Shelby', 'Court']
- }
- Person.prototype.sayName = function() {
- console.log(this.name)
- }
- var person1 = new Person()
- var person2 = new Person()
- person1.friends.push('Van')
- console.log(person1.friends) //["Shelby", "Court", "Van"]
- console.log(person2.friends) // ["Shelby", "Court"]
- console.log(person1.friends === person2.friends) //false
动态原型模式
只有在sayName办法不存在的时刻,才会将它添加到原型中。这段代码只会初次调用构造函数的时刻才会履行。
此后原型已经完成初始化,不须要在做什么修改了
这里对原型所做的修改,可以或许急地点所有实例中获得反竽暌钩
其次,if语句检查的可所以初始化之后应当存在的任何属性或办法,所以不必用一大年夜堆的if语句检查每一个属性和办法,只要检查一个就行
寄生构造函数模式
这种模式的根本思惟就是创建一个函数,该函数的感化仅仅是封装创建对象的代码,然后再返回新建的对象
- function Person(name, job) {
- var o = new Object()
- o.name = name
- o.job = job
- o.sayName = function() {
- console.log(this.name)
- }
- return o
- }
- var person1 = new Person('Jiang', 'student')
- person1.sayName()
这个模式,除了应用new操作符并把应用的包装函数叫做构造函数之外,和工厂模式几乎一样
构造函数如不雅不返回对象,默认也会返回一个新的对象,经由过程在构造函数的末尾添加一个return语句,可以重写调用构造函数时返回的值
稳妥构造函数模式
起首明白稳妥对象指的是没有公共属性,并且其办法也不引用this。
- function Person(name, job) {
- // 属性
- this.name = name
- this.job = job
- // 办法
- if(typeof this.sayName !== 'function') {
- Person.prototype.sayName = function() {
- console.log(this.name)
推荐阅读
在“暗网(Dark Web)” 上出现了两款针对 Mac 电脑的全新恶意软件,这两款 Mac 恶意软件分别是 MacSpy 和 MacRansom ,并经由过程 Maas 和 Raas 方法进击。两款恶意软件来自一个>>>详细阅读
本文标题:JavaScript创建对象的七种方式
地址:http://www.17bianji.com/lsqh/35768.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示