JS-创建对象模式-工厂模式、构造函数模式、原型模式、组合模式、动态原型模式、寄生构造函数模式、稳妥构造函数模式

本文详细介绍了JavaScript中创建对象的多种模式,包括工厂模式、构造函数模式、原型模式及其动态性、组合模式、动态原型模式、寄生构造函数模式和稳妥构造函数模式,探讨了它们的特点、优缺点和应用场景。例如,原型模式允许对象实例共享属性和方法,但可能导致引用类型的属性被多个实例共享。组合使用构造函数和原型模式可以同时实现实例的独立性和方法的共享,是最常用的模式之一。
摘要由CSDN通过智能技术生成

本文首发于我的个人博客 ruiqima.com
原文链接:JS 创建对象模式

工厂模式

本质:用函数封装创建对象的细节。
特点:

  • 显式创建了对象(如Object
  • 不使用new
  • return语句
  • 缺点:没有解决对象识别问题,即怎样知道一个对象的类型。(如代码倒数第二行的false
function createPerson(name, age) {
  var o = new Object()
  
  o.name = name
  o.age = age
  o.sayName = function () {}
  
  return o
}

var person = createPerson('Joker', 23)

console.log(person instanceof createPerson) 	// false
console.log(person.__proto__)	 //{}

构造函数模式

特点:

  • 没有显式创建对象
  • 直接将属性和方法赋给了this对象
  • 没有return语句
  • 创建新实例需使用new操作符
  • 可以解决工厂模式不能确定对象类型的问题
  • 缺点:会导致不同实例中的方法不是同一个Function实例,导致不同的作用域链和标识符解析。(同一个名为sayName 的方法在不同实例中是不同Function对象)(如代码倒数第三行的false
function Person(name, age) {
  this.name = name
  this.age = age
  this.friends = ['1', '2']
  this.sayName = function () {}
}

var person1 = new Person('Joker', 23)
var person2 = new Person('Joker1', 24)

person1.friends.push('3')
console.log(person1.friends) 	//[ '1', '2', '3' ]
console.log(person2.friends)	 //[ '1', '2' ]
console.log(person1.sayName === person2.sayName) 	//false

console.log(person1 instanceof Person) 	//true
console.log(person
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值