带你读《现代Javascript高级教程》七、原型和原型链(2)https://developer.aliyun.com/article/1349649?groupCode=tech_library
3.原型链
原型链是 JavaScript 中对象之间通过原型链接起来的机制,用于实现属性和方法的继承。它是由一系列的原型对象组成,每个对象都有一个指向其原型对象的连接,形成了一条链式结构。
原型链的概念可以通过以下方式解释:在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]](__proto__),它指向该对象的原型。当我们访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会自动沿着原型链向上查找,直到找到匹配的属性或方法或者到达原型链的顶部(Object.prototype)。
让我们通过一个示例来说明原型链的概念和工作原理:
// 父对象构造函数function Parent() { this.name = "Parent";} // 在父对象原型上添加方法Parent.prototype.sayHello = function() { console.log("Hello, I am " + this.name);}; // 子对象构造函数function Child() { this.name = "Child";} // 通过原型继承建立子对象和父对象的连接Child.prototype = Object.create(Parent.prototype); // 创建子对象实例var child = new Child(); // 调用父对象原型上的方法 child.sayHello(); // 输出: "Hello, I am Child"
在这个示例中,我们定义了一个父对象构造函数 Parent,它有一个属性 name 和一个原型方法 sayHello。然后,我们定义了一个子对象构造函数 Child,它也有一个属性 name。通过 Object.create() 方法,我们将子对象的原型连接到父对象的原型上,建立了子对象和父对象之间的原型链关系。
最后,我们创建了子对象实例 child,并调用了父对象原型上的方法 sayHello。
以下是一个简单的原型链示意图:
+----------------------+ | Object.prototype | +----------------------+ ^ | +----------------------+ | Parent.prototype | +----------------------+ ^ | +----------------------+ | Child.prototype | +----------------------+ ^ | +----------------------+ | Child instance | +----------------------+
在这个示意图中,Object.prototype 是所有对象的顶层原型,Parent.prototype 是父对象的原型,Child.prototype 是子对象的原型,Child instance 是基于子对象构造函数创建的对象实例。
原型链的重要性体现在以下几个方面:
- 继承:原型链允许对象通过继承获取其他对象的属性和方法。子对象可以继承父对象的属性和方法,而父对象又可以继承更上层对象的属性和方法,以此类推。
- 代码复用和共享:通过原型链,我们可以在原型对象上定义方法和属性,从而实现多个对象之间的方法共享和代码复用。这样可以节省内存空间,提高性能,并减少代码的冗余。
- 扩展和修改:通过在原型对象上添加新的方法和属性,我们可以在整个原型链中的所有对象实例上访问和使用这些扩展。这样可以方便地对现有对象进行功能扩展和修改。
带你读《现代Javascript高级教程》七、原型和原型链(4)https://developer.aliyun.com/article/1349647?groupCode=tech_library