解释原型继承如何工作
Topics
JavaScriptOOP
在GitHub上编辑
这是一个极其常见的 JavaScript 面试问题。 所有 JavaScript 对象(用Object.create(null)
创建的对象除外)都有一个 __proto__
属性,是指另一个对象,它叫做对象的“原型”。 当一个属性在一个对象上被访问时,如果该属性未在该对象上被找到, JavaScript 引擎看看对象的 __proto__
、 __proto__
的 __proto__
等,直到它在一个 __proto__
中找到定义的属性或直到它到达原型链的末尾。 这种行为模拟传统继承,但它实际上更多是委托而不是继承。
原型继承的例子
需要注意的是:
.makeSound
没有定义在Dog
上,因此引擎会在继承的原型链Animal
上发现.makeSound
。- Using
Object.create
to build the inheritance chain is no longer recommended. UseObject.setPrototypeOf
instead.