我有以下代码:
var Base = function () {
// do stuff
}
Base.prototype.foo = function () {
console.log("foo");
}
Base.prototype.someMethods = {
methodOne: function () {
console.log("methodOne");
},
methodTwo: function () {
console.log("methodTwo");
}
};
var myClass = function () {
Base.call(this);
}
myClass.prototype = Object.create(Base.prototype);
myClass.constructor = myClass;
myClass.prototype.foo = function () {
console.log("myClass")
Base.prototype.foo.call(this);
};
myClass.prototype.someMethods.methodOne = function () {
console.log("myClass");
Base.prototype.someMethods.call(this);
};
创建myClass
的实例时,对myClass.foo()
的调用将按预期工作。它将调用myClass
方法,然后调用基础构造方法作为该逻辑的一部分。
但是,myClass.prototype.someMethods.methodOne
实际上会覆盖Base.prototype.someMethods.methodOne
(console.log(Base.prototype.someMethods.methodOne)
会显示myClass函数)。
因此,对Base.prototype.somemethods.call(this)
的调用会产生无限递归。
你能告诉我为什么会这样吗?如何为someMethods
对象的方法创建不同的原型链?
要使此代码正常运行,我需要了解什么?