0

以下对象是基于 Nicholas Zakas 的“JavaScript 中面向对象编程原理”中的示例构建的。但是,我无法从语法中发现一些错误。当我尝试将其加载到浏览器中时,控制台中出现错误:“ReferenceError: owner_idx is not defined”

任何人都知道如何修复?

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 回答