我一直在从 John Resig 的JavaScript Ninja 的秘密中学习 JavaScript 中的原型继承,我想知道在下面的代码示例(我刚刚编造的)中会发生什么。
function Person() {}
Person.prototype.sayHello = function() {
alert("Hello World");
}
function Ninja() {}
Ninja.prototype.swingSword = function() {
alert("I can swing my sword.");
}
Ninja.prototype = new Person();
var ninja1 = new Ninja();
据我所知,所有这些代码行的结果是变量ninja1
引用了一个Ninja
对象,通过它的原型,有swingSword
方法,通过原型的原型继承Person
,有sayHello
方法。
我感到困惑的地方如下:由于属性swingSword
(恰好是一个方法)在将人员实例分配给Ninja
的原型之前已附加到 的原型,因此以后的分配不会覆盖Ninja
该属性/方法swingSword
的Person
实例?如果不是,那么Ninja
引用原型对象的原型属性如何既引用Person
实例又具有swingSword
属性?