我在这里有一个基类:
function Screen(src) {
this.src = src;
}
Screen.prototype.html = function(collapsed) {
return $.ajax({
async : false,
url : this.src + "?collapsed=" + collapsed,
}).responseText;
};
然后我尝试将其子类化:
function TitleScreen() {
Screen.call(this, "title.php");
};
TitleScreen.prototype = Object.create(Screen.prototype);
TitleScreen.prototype.constructor = TitleScreen;
TitleScreen.prototype.parent = Screen.prototype;
但是当我这样做并尝试使用TitleScreen对象时,它的src属性设置,但是没有定义html函数!我也尝试在构造函数中设置html函数,如下所示:
function Screen(src) {
this.src = src;
this.html = function(collapsed) {
return $.ajax({
async : false,
url : this.src + "?collapsed=" + collapsed,
}).responseText;
};
}
但这也不起作用。我做错了什么可能导致普通的旧属性工作但不起作用?
答案 0 :(得分:0)
您忘记了new
关键字了吗?只有在创建构造函数的实例时,该对象才会从prototype
对象继承:
var title = new TitleScreen();
"html" in title; // true
或者您是否有一些额外的代码,您没有向我们显示覆盖TitleScreen.prototype
而不是向其添加属性?
答案 1 :(得分:0)
我的问题实际上与继承完全无关;它与本地存储有关。
调用新的TitleScreen()。html()实际上确实返回了HTML,但我将Screen对象序列化为JSON并将它们放在本地存储中,以便我的应用程序可以记住它的状态。然而序列化显然没有考虑到功能,所以我失去了那些。
要解决我的问题,我需要在从本地存储中反序列化时重新构建函数。