Javascript中未定义函数的奇怪错误

时间:2016-08-08 02:51:43

标签: javascript prototype undefined base derived

我定义了一个基类和派生类,两者都定义了一个名为“getYear”的函数:

function Base() {}
Base.prototype.getYear = function() {
    return 2015;
}

function Derived() {
    year = 2016;
}
Derived.prototype = new Base();
Derived.prototype.getYear = function() {
    return 2017;
}

var ins = new Derived();
console.log(ins.getYear());
console.log(ins.prototype.getYear());

最后一个语句将触发运行时错误

 Cannot read property 'getYear' of undefined

你能帮忙解释一下原因吗? 我想我已经在base / derived函数中定义了这个函数。

1 个答案:

答案 0 :(得分:1)

prototypes(实例方法)在Constructor上声明,仅用于instance。如果您想使用基于实例的原始原型方法,您可以执行以下操作:

var ins = new Derived();
ins.constructor.prototype.getYear();

您从原始getYear获取constructor原型。然而,这种方式在实例意义上违背了使用原型的目的。

这是你的例子,重新做了你想做的事情:



function Base() {}
Base.prototype.getYear = function() {
  return 2015;
}

function Derived() {
  year = 2016;
}
Derived.prototype = new Base();
Derived.prototype.getYear = function() {
  return 2017;
}

var ins = new Derived();
console.log(ins.getYear());
console.log(ins.constructor.prototype.getYear());