js 创建对象的多种方式

Posted lijianming180

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 创建对象的多种方式相关的知识,希望对你有一定的参考价值。

参考: javascript 高级程序设计第三版

工厂模式

1
2
3
4
5
6
7
8
9
10
function (name) {
var obj = new Object()
obj.name = name
obj.getName = function() {
console.log(this.name)
}
return obj
}

var person1 = createPerson('jack')
  • 缺点:对象无法识别,所有实例都指向同一个原型

构造函数模式

1
2
3
4
5
6
7
function Person(name) {
this.name = name
this.getName = function() {
console.log(this.name)
}
}
var person1 = new Person('jack')
  • 优点:实例可以识别为一个特定类型
  • 缺点:每次创建实例时候,每个方法都会被创建一次

构造函数模式优化

1
2
3
4
5
6
7
8
9
10
function Person(name) {
this.name = name
this.getName = getName
}

function getName() {
console.log(this.name)
}

var person1 = new Person('jack')
  • 优点:解决每个方法都会被重新创建的问题
  • 缺点:没有很好的封装性

原型模式

1
2
3
4
5
6
7
8
9
function Person(name) {
}

Person.prototype.name = 'jack'
Person.prototype.getName() {
console.log(this.name)
}

var person1 = new Person('jack')
  • 优点:方法不会重新创建
  • 缺点:所有属性和方法都给共享;不能初始化参数

原型模式优化

1
2
3
4
5
6
7
8
9
10
大专栏  js 创建对象的多种方式>11
function Person(name) {
}

Person.prototype = {
name: 'jack',
getName: function() {
console.log(this.name)
}
}

var person1 = new Person('jack')
  • 缺点:重新了原型,丢失了 constructor 属性

原型模式优化

1
2
3
4
5
6
7
8
9
10
11
12
function Person(name) {
}

Person.prototype = {
constructor: Person,
name: 'jack',
getName: function() {
console.log(this.name)
}
}

var person1 = new Person('jack')
  • 优点: 实例可以通过 constructor 属性找到所属构造函数
  • 缺点: 还是存在原型模式的缺点

组合模式(构造函数模式和原型模式结合)

1
2
3
4
5
6
7
8
9
10
11
12
function Person(name) {
this.name = name
}

Person.prototype = {
constructor: Person,
getName: function() {
console.log(this.name)
}
}

var person1 = new Person('jack')
  • 优点:该共享的共享,该私有的私有

寄生构造函数模式

1
2
3
4
5
6
7
8
9
10
11
12
13
function Person(name) {
var obj = new Object()
obj.name = name
obj.getName = function () {
console.log(this.name)
}

return obj
}

var person1 = new Person('jack');
console.log(person1 instanceof Person)
console.log(person1 instanceof Object) // true
  • 缺点:对象无法识别,所有实例都指向同一个原型,本质还是工厂模式

以上是关于js 创建对象的多种方式的主要内容,如果未能解决你的问题,请参考以下文章

js创建对象的多种方式及优缺点

js创建对象的多种方式及优缺点

js之对象创建方式

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

javascript 面向对象(多种创建对象的方式)