覆盖继承对象的方法

时间:2017-02-02 02:03:05

标签: javascript prototype-chain

我有以下代码:

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.methodOneconsole.log(Base.prototype.someMethods.methodOne)会显示myClass函数)。

因此,对Base.prototype.somemethods.call(this)的调用会产生无限递归。

你能告诉我为什么会这样吗?如何为someMethods对象的方法创建不同的原型链?

要使此代码正常运行,我需要了解什么?

0 个答案:

没有答案