Javascript继承不当行为

时间:2011-10-19 13:33:49

标签: javascript inheritance

我这里有一些js代码链接已删除

如果您打开js控制台并且您将运行此代码snipet

var r = new TempPopupForm("xxx");
r.create();

将出现错误

TypeError: this.init is not a function

此错误表示此对象上没有实现init方法。

但事实并非如此。正如您在下面的代码中看到的那样,声明了init方法。

TempPopupForm.prototype = new PopupForm();
TempPopupForm.prototype.constructor = TempPopupForm;
TempPopupForm.superclass = PopupForm.prototype;

function TempPopupForm(name) {
     this.init(name);
}
TempPopupForm.prototype.init = function(name) {
     TempPopupForm.superclass.init.call(this, name);
};

我想继承定义有问题,但我无法弄清楚它是什么。

BTW有一些第三方依赖。

修改

我正在关注这篇文章,并按照我的方式订购了funcs。该命令实际上适用于其他类,但不适用于此类。   http://www.kevlindev.com/tutorials/javascript/inheritance/inheritance10.htm

1 个答案:

答案 0 :(得分:0)

您需要重新排序函数和实例化。由于构造函数使用自己的原型方法之一进行初始化,因此它们都需要位于实例化对象的块之上。 JavaScript提升顶级函数。

试试这个 -

function TempPopupForm(name) {
     this.init(name);
}

TempPopupForm.prototype = new PopupForm();
TempPopupForm.prototype.constructor = TempPopupForm;
TempPopupForm.superclass = PopupForm.prototype;

TempPopupForm.prototype.init = function(name) {
     TempPopupForm.superclass.init.call(this, name);
};

var r = new TempPopupForm("xxx");
r.create();