Getter在null值上返回整个函数

时间:2014-03-16 10:31:57

标签: javascript object getter-setter

我创建了一个简单的存储对象来存储带有setter和getter的名称。但是,在设置之前尝试获取名称会返回函数吗?我希望它返回null

name: function (val) {
    var value = val;

    this.__defineGetter__('value', function () {
        if (value == null) return null;
        return value;
    });

    this.__defineSetter__('value', function(val) {
        value = val;
    });
},

完整代码:

http://jsfiddle.net/GKC4P/2/

2 个答案:

答案 0 :(得分:1)

试试这种方式。你不需要得到吸气剂或者叮咬者

var storage = {};

Object.defineProperty(storage, 'name', {
   value : null,
   writable: true

});

alert(storage.name);
storage.name = 'Bob';
alert(storage.name);

这也可以用同样的方式。

答案 1 :(得分:0)

namestorage对象的一种方法 - 调用时会为.value属性创建一个setter / getter。你想要的是

var storage = {};
var value = val;
storage.__defineGetter__('name', function () {
    if (value == null) return null;
    return value;
});
storage.__defineSetter__('name', function(val) {
    value = val;
});

或者使用适当的Object.defineProperty和IEFE来制作value本地:

var storage = (function() {
    var value = val;
    return Object.defineProperty({}, 'name', {
        get: function () {
            if (value == null) return null;
            return value;
        },
        set: function(val) {
            value = val;
        }
   });
}());