简体   繁体   English

Getter在空值上返回整个函数

[英]Getter returns whole function on null value

I've created a simple storage object to store a name with setters and getters. 我创建了一个简单的存储对象,用于存储带有setter和getter的名称。 However, trying to fetch the name before it is set returns the function? 但是,尝试在设置名称之前获取名称会返回该函数吗? I would want it to return null 我希望它返回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;
    });
},

For the full code: 有关完整代码:

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

Try this way. 尝试这种方式。 You don't need getters or setters 您不需要getter或setter

var storage = {};

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

});

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

This will also work the same way. 这也将以相同的方式工作。

name is a method of your storage object - which when called creates a setter/getter for the .value property. namestorage对象的一种方法-调用该对象时将为.value属性创建一个setter / getter方法。 What you want is 你想要的是

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

Or with proper Object.defineProperty and an IEFE for making value local: 或使用适当的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;
        }
   });
}());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM