我一直在从 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属性?