自定义JS对象无法正确解析

时间:2013-03-19 22:44:36

标签: javascript oop

以下对象是基于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
    });
};

1 个答案:

答案 0 :(得分: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);

HOWEVER 如果您的唯一目的是获取/设置属性值(在存储/检索之前不转换它们,或者更改其值会影响其他属性),则不需要访问器方法。常规属性可以正常工作。