原型链
原型和原型链
1 | |
JavaScript 中的原型链是一种对象之间继承关系的表示方式,它基于原型(prototype)和原型对象(prototype object)的概念。每个 JavaScript 对象都有一个原型对象,它可以包含属性和方法,这些属性和方法可以被对象本身访问和继承。
以下是关于 JavaScript 原型链的一些关键概念:
构造函数和原型对象:
- 在 JavaScript 中,通常通过构造函数来创建对象。构造函数本身也是一个函数,可以创建多个具有相同属性和方法的对象。
- 构造函数有一个原型对象,通常称为
prototype。该原型对象包含了对象实例可以继承的属性和方法。
对象实例和原型对象之间的关系:
- 对象实例是由构造函数创建的,它们可以访问构造函数的原型对象上的属性和方法。
- 如果对象实例上没有找到某个属性或方法,JavaScript 引擎会继续查找该对象的原型对象,以及原型对象的原型对象,依此类推,直到找到或者达到原型链的顶端为止。
原型链:
- 原型链是一种对象之间的继承链条,由原型对象构成。当一个对象需要访问属性或方法时,它会首先在自己的属性中查找,如果没有找到,就会继续在原型对象中查找,然后在原型对象的原型对象中查找,以此类推,直到找到或者达到原型链的顶端。
- 原型链的终点是
Object.prototype,它是 JavaScript 中所有对象的顶层原型对象。
隐式原型:
- 所有的对象都有一个属性__proto__ ,默认情况下,隐式原型指向创建该对象的函数的原型。称之为隐式原型
以下是一个简单的示例,演示了 JavaScript 原型链的基本用法:
1 | |
在这个示例中,Person 构造函数有一个原型对象 Person.prototype,该原型对象包含 sayHello 方法。通过 person1 和 person2 对象实例,我们可以调用 sayHello 方法,因为它们继承自 Person.prototype。同时,我们可以看到 hasOwnProperty 方法只在对象实例上返回 true,而不会在原型链上返回 true,这说明了原型链的工作原理。
当访问一个对象的成员时:
1.看该对象自身是否拥有该成员,如果有直接使用
2.看该对象的隐式原型是否拥有该成员,如果有直接使用
猴子补丁: 在函数原型中加入成员,以增强起对象的功能,猴子补丁会导致原型污染,使用需谨
慎
原型链
http://jhayes.cn/blog/200855344.html
