JS-原型模式

279 阅读2分钟

什么是原型模式

  • 原型模式:创建一个共享的原型,并通过拷贝这些原型创建新的对象。我们不再关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象。在其他语言很少使用原型模式,但是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}`); //this表示调用本函数的一个具体实例化的类
    }
    const aa = new person();
    const name1 = aa.showName('one');
    console.log(name1)

    const bb = new person();
    const name2 = bb.showName('two');
    console.log(name2)

特点

  • 构造函数内不定义属性和方法,把属性和方法都定义在构造函数的原型上。这样所有的对象实例都共享对象原型上的属性和方法

优缺点

  • 优点
    1. 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过克隆一个已有实例可以提高新实例的创建效率。
    2. 多个实例可以共享原型上的属性和方法
  • 缺点
    1. 修改原型上的一些引用属性,所有实例对应的属性也将被改变,这样可能带来一些问题