Skip to content
快看这页儿写了啥...

什么是原型、原型链?

题干

  • 原型

  • 原型链

题解

原型:

在 JS 中是使用构造函数来新建一个对象的,每一个构造函数的内部都有一个 prototype 属性,它的属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当使用构造函数新建一个对象后,在这个对象的内部将包含一个指针,这个指针指向构造函数的 prototype 属性对应的值,在 ES5 中这个指针被称为对象的原型。一般来说不应该能够获取到这个值的,但是现在浏览器中都实现了 __proto__ 属性来访问这个属性,但是尽量避免使用这个属性,因为它不是规范中规定的。可以使用 ES5 中新增的 Object.getPrototypeOf() 方法来获取对象的原型。

原型链:

当我们访问一个对象的属性或方法时,如果该对象本身没有定义该属性或方法,JS 引擎会自动去对象的原型中查找。而这个原型对象又会有自己的原型,于是就这样一直找下去,也就是原型链的概念。原型链的尽头(顶端)是 Object.prototype,即对象原型,它是所有对象的最终原型。对象没有自己的原型,所以它的 __proto__ 属性值为 null

原型和原型链在 JS 中实现了对象之间的继承关系。通过原型,对象可以共享属性和方法,而不必在每个对象实例中都定义一遍。通过原型链,对象可以访问到其他对象的属性和方法,实现了属性和方法的继承。这是 JS 中面向对象编程的基础。

使用 hasOwnProperty() 方法来判断属性是否属于原型链的属性

🌰:

javascript
function iterate(obj){
  var res=[];
  for(var key in obj){
    if(obj.hasOwnProperty(key))
      res.push(key+': '+obj[key]);
  }
  return res;
}

相关

prototype 和 proto 区别

什么是继承、JS 有哪些继承方式

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐