Javascript继承错误行为

Javascript继承错误行为,javascript,inheritance,Javascript,Inheritance,我有一些js代码在这里链接删除 如果打开js控制台并运行以下代码 var r = new TempPopupForm("xxx"); r.create(); 将出现一个错误 TypeError: this.init is not a function 此错误表示此对象上未实现init方法 但事实并非如此。正如您在下面的代码中所看到的,init方法是声明的 TempPopupForm.prototype = new PopupForm(); TempPopupForm.prototype.co

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

如果打开js控制台并运行以下代码

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);
};
我猜继承定义有问题,但我不知道它是什么

顺便说一句,有一些第三方的依赖关系

编辑

我一直在关注这篇文章,而func的顺序和我的一样。这个顺序实际上适用于其他类,但不适用于这个类。

您需要对函数和实例化重新排序。由于构造函数使用自己的一个原型方法初始化,因此它们都需要位于实例化对象的块之上。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();

那个原始ip地址超链接让人觉得可疑…那是我的测试机器,所以我没有域名:-你不想改用吗?就我个人而言,我发现它看起来很可疑——让其他用户不愿意关注链接或帮助解决您的问题——而您正将您的测试机器暴露/单独作为黑客的目标……没错。我将代码移到了JSFIDLE。您的功能出了问题。将构造函数和原型移到实例化new PopupFormI上面,按照您的建议对其重新排序,但要知道它说:tempopupform.superclass未定义我进行了编辑。。。不确定这是否有效。你为什么要这样做?当然还有一种更简单的方法,它再次指出:this.init不是一个函数。我在看这篇文章我不确定。。。对不起,我帮不了你