Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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/Setter应用于对象_Javascript_Node.js_Constructor_Getter Setter - Fatal编程技术网

Javascript 如何将Getter/Setter应用于对象

Javascript 如何将Getter/Setter应用于对象,javascript,node.js,constructor,getter-setter,Javascript,Node.js,Constructor,Getter Setter,在定义对象时,如何将getter/setter应用于对象本身 例如,我想 myobj=123runconsole.log(123) 我知道可以使用类扩展,但我想找到一种更简单的方法来定义getter/setter,可能是在构造函数中 有人知道怎么做吗?这可能吗 如果你需要更多的信息,或者我不够清楚,请告诉我-JacobTDCgetter和setter与对象的属性相关,而不是像您的问题中那样与变量赋值相关 类扩展在这里并不真正相关 请勾选此项,例如: var语言={ 设置当前(名称){ this

在定义对象时,如何将getter/setter应用于对象本身

例如,我想

myobj=123
run
console.log(123)

我知道可以使用
类扩展
,但我想找到一种更简单的方法来定义getter/setter,可能是在构造函数中

有人知道怎么做吗?这可能吗


如果你需要更多的信息,或者我不够清楚,请告诉我
-JacobTDC

getter
setter
与对象的属性相关,而不是像您的问题中那样与变量赋值相关

类扩展
在这里并不真正相关

请勾选此项,例如:

var语言={
设置当前(名称){
this.log.push(名称);
},
日志:[]
}
language.current='EN';
console.log(language.log);//[EN']
language.current='FA';

console.log(language.log);//['EN','FA']
这实际上在MDN中得到了很好的描述-本文提供了一个简单的示例,说明JavaScript中getter和setter的用法

此示例的修改(适合您的问题)版本如下所示:

var o = {
    set myvar(value) {
        console.log(value);
        this.myvar = value;
    }
};

o.myvar = 123;
// Should call console.log(123)

还有另一种方法——您可以使用ES2015代理及其陷阱。在出于某种原因不想修改原始对象的情况下,这可能很有用

这两个代理是每个对象的“全局”代理(如-它们捕获对代理对象的所有属性执行的get/set)。下面是一个基于链接文章的简单示例:

var o = new Proxy({}, {
    set: function(target, prop, value, receiver) {
        target[prop] = value;

        // "set" proxy is global, so it will catch calling assignment operator on ALL properties of this object
        if (prop === "myvar") {
            console.log(value)
        }

        return true
    }
});

o.myvar = 123;
// Should call console.log(123)

可以使用
Object.defineProperty()
为属性定义setter:

var a = {}
Object.defineProperty(a, 'myobj', {
  set: function (value) {
    console.log(value)
  }
})
a.myobj = 111

myobj=123
@MinusFour中没有对象,这只是一个例子。是的,我意识到这是可能的,我只是不想这样做。我担心变量赋值不是javascript中可以“获取”的东西(我甚至不确定哪种语言支持这一点)。感谢您的澄清。您能告诉我所描述的页面中的位置吗,因为我在过去30分钟里一直在查看该页面,并且它的外观都开始相同。我提供的第一个链接直接指向所述示例(在
b
属性上定义了getter的链接).我用两个例子编辑了我的答案,也许这会有所帮助。谢谢,@mdziekon!