Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Getter返回空值的整个函数_Javascript_Object_Getter Setter - Fatal编程技术网

Javascript Getter返回空值的整个函数

Javascript Getter返回空值的整个函数,javascript,object,getter-setter,Javascript,Object,Getter Setter,我创建了一个简单的存储对象,用setter和getter存储名称。但是,在设置名称之前尝试获取名称会返回函数吗?我希望它返回空值 name: function (val) { var value = val; this.__defineGetter__('value', function () { if (value == null) return null; return value; }); this.__defineSet

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

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

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

    this.__defineSetter__('value', function(val) {
        value = val;
    });
},
有关完整代码:


试试这种方法。你不需要有接受者或接受者

var storage = {};

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

});

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

这也将以同样的方式工作。

name
存储
对象的一种方法-调用该对象时,将为
.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;
});
或者使用适当的
对象。定义属性
和用于使
本地的IEFE:

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

因为您将名称声明为函数。然后用字符串覆盖它。它甚至从不执行代码来定义get/set。为什么需要
对象。defineProperty
位?如果没有这个,它应该可以正常工作。