饥人谷技术博客

JS里的原型与原型链

2019-02-08  本文已影响3人  不爱举铁的伪文青不是好前端

原型

原型和原型链的目的是解决构造函数生成的对象内共同属性重复生成的问题,使其更高效。在下面这个例子里每次生成一个实例对象都要生成一个mmm方法,没有必要,完全可以共享。

构造函数生成的对象称为实例对象

function Person(name,gender){
  this.name = name
  this.gender = gender
  this.mmm = function reader(){
    console.log('hello world')
  }
}

var person1 = new Person(Jack,male)
var person2 = new Person(Lucy,female)

person1person2是构造函数Person生成的两个实例对象

function Person(name,gender){
  this.name = name
  this.gender = gender
 }
Person.prototype.mmm = function reader(){
    console.log('hello world')
  }
var person1 = new Person(Jack,male)
var person2 = new Person(Lucy,female)

person1.mmm // 'hello world'
person2.mmm // 'hello world'

上面例子里构造函数Personprototype属性就是person1person2的原型对象,原型对象添加一个mmm属性,两个实例对象都共享这个属性。

原型链

JS里面规定所有对象都有自己的原型对象,而原型对象也是对象因此也有自己的原型对象,而且任何一个对象都可以充当其他对象的原型,因此会形成一个原型链

如果一层层上溯,所有对象的原型都可以追溯到Object.prototype,既Object构造函数的prototype属性,也就是说所有的属性都继承了Object.prototype的属性,这就是所有对象都有valueOf()toString()方法的原因,因为这两个方法在Object.prototype里面。
需要注意Object.prototype的原型是null

kNwh5R.md.png
String.prototype是String公用属性引用(防止被垃圾回收)
上一篇下一篇

猜你喜欢

热点阅读