0

ここに基本クラスがあります:

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

しかし、それもうまくいきませんでした。普通の古い属性は機能するが機能は機能しない可能性がある、私は何を間違っていますか?

4

2 に答える 2

0

newキーワードを忘れましたか?コンストラクター関数のインスタンスを作成する場合にのみ、オブジェクトはオブジェクトから継承しprototypeます。

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

jsfiddle.netでのデモ

TitleScreen.prototypeまたは、プロパティを追加する代わりに上書きする、表示しなかった追加のコードがありますか?

于 2012-10-17T13:36:44.840 に答える
0

私の問題は、実際には継承とはまったく関係がありませんでした。それはローカルストレージに関係していました。

new TitleScreen().html() を呼び出すと、実際には HTML が返されましたが、Screen オブジェクトを JSON としてシリアル化し、それらをローカル ストレージに配置して、アプリがその状態を記憶できるようにしていました。ただし、シリアル化では機能が考慮されていないようで、機能が失われていました。

私の問題を解決するには、ローカル ストレージから逆シリアル化するときに関数を再構成する必要があります。

于 2012-10-17T14:05:24.173 に答える