0

次のオブジェクトは、Nicholas Zakas による「JavaScript におけるオブジェクト指向プログラミングの原則」の例に基づいて構築されています。ただし、構文に問題があるとは言えません。これをブラウザーにロードしようとすると、コンソールに「ReferenceError: owner_idx が定義されていません」というエラーが表示されます。

これを修復する方法を知っている人はいますか?

function Editor() {
    Object.defineProperty(this, "program_idx", {
        get: function() {
            return program_idx;
        },
        set: function(newVal) {
            program_idx = newVal;
        },
        enumerable: true,
        configurable: true
    });

    Object.defineProperty(this, "owner_idx", {
        get: function() {
            return owner_idx;
        },
        set: function(newVal) {
            owner_idx = newVal;
        },
        enumerable: true,
        configurable: true
    });
};
4

1 に答える 1

2

さて、「owner_idx が定義されていません」。なぜ定義しないのですか?

function Editor() {

    var program_idx, owner_idx; 

    Object.defineProperty(this, "program_idx", {
        get: function() {
            return program_idx;
        },
        set: function(newVal) {
            program_idx = newVal;
        },
        enumerable: true,
        configurable: true
    });

    Object.defineProperty(this, "owner_idx", {
        get: function() {
            return owner_idx;
        },
        set: function(newVal) {
            owner_idx = newVal;
        },
        enumerable: true,
        configurable: true
    });
};

var e = new Editor();
e.owner_idx = "foo";
console.log(e.owner_idx);

ただし、唯一の目的がプロパティ値を取得/設定することである場合は、アクセサメソッドは必要ありません (保存/取得する前に変換したり、値を変更して他のプロパティに影響を与えたりする必要はありません)。通常のプロパティは問題なく機能します。

于 2013-03-19T22:51:25.493 に答える