JavaScript中的原型链是一种重要的特性,它是为了实现继承和对象属性查找而存在的。原型链的存在使得JavaScript具有了一种基于原型的面向对象编程模式。
以下是一些原型链的作用和优点:
- 继承: JavaScript中的继承是通过原型链来实现的。每个对象都有一个指向其原型(prototype)的链接,从而可以访问原型对象的属性和方法。当对象访问一个属性或方法时,如果对象本身没有定义,JavaScript引擎会沿着原型链向上查找,直到找到对应的属性或方法为止。
- 节省内存: 使用原型链可以节省内存空间,因为多个对象可以共享同一个原型对象,而不必为每个对象都复制一份属性和方法。
- 动态性: 在运行时可以动态地修改原型对象,这样就可以影响到所有继承自该原型对象的对象。
- 灵活性: 原型链使得对象之间可以很灵活地建立关联关系,可以通过修改原型链来实现多种继承和组合方式。
话不多上先上代码
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()
输出如下
这是一个简单的构造函数 生成三位人物 但是为什么这么写不对呢 借MDN的一句话
这是不够好的,因为每一个实例都有自己的,做相同事情的函数属性,这是冗余且不必要的。
原型图
根据代码我们可生成User的原型图
优化
把方法定义到原型上
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()