我的Javascript类继承了原型的属性,但不是函数!为什么是这样?

时间:2012-10-17 13:14:50

标签: javascript

我在这里有一个基类:

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;
    };
}

但这也不起作用。我做错了什么可能导致普通的旧属性工作但不起作用?

2 个答案:

答案 0 :(得分:0)

您忘记了new关键字了吗?只有在创建构造函数的实例时,该对象才会从prototype对象继承:

var title = new TitleScreen();
"html" in title; // true

Demo at jsfiddle.net

或者您是否有一些额外的代码,您没有向我们显示覆盖TitleScreen.prototype而不是向其添加属性?

答案 1 :(得分:0)

我的问题实际上与继承完全无关;它与本地存储有关。

调用新的TitleScreen()。html()实际上确实返回了HTML,但我将Screen对象序列化为JSON并将它们放在本地存储中,以便我的应用程序可以记住它的状态。然而序列化显然没有考虑到功能,所以我失去了那些。

要解决我的问题,我需要在从本地存储中反序列化时重新构建函数。