原型

81 阅读2分钟

JavaScript中的原型链是一种重要的特性,它是为了实现继承和对象属性查找而存在的。原型链的存在使得JavaScript具有了一种基于原型的面向对象编程模式。

以下是一些原型链的作用和优点:

  1. 继承: JavaScript中的继承是通过原型链来实现的。每个对象都有一个指向其原型(prototype)的链接,从而可以访问原型对象的属性和方法。当对象访问一个属性或方法时,如果对象本身没有定义,JavaScript引擎会沿着原型链向上查找,直到找到对应的属性或方法为止。
  2. 节省内存: 使用原型链可以节省内存空间,因为多个对象可以共享同一个原型对象,而不必为每个对象都复制一份属性和方法。
  3. 动态性: 在运行时可以动态地修改原型对象,这样就可以影响到所有继承自该原型对象的对象。
  4. 灵活性: 原型链使得对象之间可以很灵活地建立关联关系,可以通过修改原型链来实现多种继承和组合方式。

话不多上先上代码

function User(name,age){
  this.name = name,
  this.age = age,
  this.sayHi = function (){
    console.log(`你好!我是${this.name},今年${this.age}岁!`);
  }
}


var u1 = new User('L',18)
var u2 = new User('夜神月',20)
var u3 = new User('硫克',1000)

console.log(u1.sayHi === u2.sayHi);
u1.sayHi()
u2.sayHi()
u3.sayHi()

输出如下

image.png

这是一个简单的构造函数 生成三位人物 但是为什么这么写不对呢 借MDN的一句话

这是不够好的,因为每一个实例都有自己的,做相同事情的函数属性,这是冗余且不必要的。

原型图

image.png

根据代码我们可生成User的原型图

image.png

优化

把方法定义到原型上

function User(name,age){
  this.name = name,
  this.age = age
}

User.prototype.sayHi = function(){
  console.log(`你好!我是${this.name},今年${this.age}岁!`);
}

var u1 = new User('L',18)
var u2 = new User('夜神月',20)
var u3 = new User('硫克',1000)

u1.sayHi()
u2.sayHi()
u3.sayHi()