什么是原型模式
- 原型模式:创建一个共享的原型,并通过拷贝这些原型创建新的对象。我们不再关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象。在其他语言很少使用原型模式,但是JavaScript作为原型语言,在构造新对象及其原型时会使用该模式。
使用场景
- 原型模式在JavaScript里的使用简直是无处不在,就是创建一个共享的原型,通过拷贝这个原型来创建新的类,用于创建重复的对象,带来性能上的提升。
原型模式实现
1. Object.create()方法用于创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。返回值:一个新对象,带着指定的原型对象和属性。
let person = {
name: '张三',
age: '18'
}
let xiaoming = Object.create(person);
xiaoming.name = '小明'
console.log(xiaoming.age)
2. prototype方式
function person() {}
person.prototype.name = "我是一个属性扩展出来的";
person.prototype.showName = function (val) {
console.log(`${val}: ${this.name}`);
}
const aa = new person();
const name1 = aa.showName('one');
console.log(name1)
const bb = new person();
const name2 = bb.showName('two');
console.log(name2)
特点
- 构造函数内不定义属性和方法,把属性和方法都定义在构造函数的原型上。这样所有的对象实例都共享对象原型上的属性和方法
优缺点
- 优点
- 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过克隆一个已有实例可以提高新实例的创建效率。
- 多个实例可以共享原型上的属性和方法
- 缺点
- 修改原型上的一些引用属性,所有实例对应的属性也将被改变,这样可能带来一些问题