我定义了一个基类和派生类,两者都定义了一个名为“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函数中定义了这个函数。
答案 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());