2017-08-09 102 views
1

定义它时,我如何将getter/setter应用于对象本身?如何将Getter/Setter应用到对象

例如,我要让

myobj = 123运行console.log(123)

我知道这是可能通过使用class extends,但我想找到定义的getter/setter一个简单的方法,可能在构造函数中。

有谁知道如何?这甚至有可能吗?

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

+0

有一个在'MyObj中= 123' – MinusFour

+0

@MinusFour没有对象,这是只是一个例子。 – JacobTDC

回答

0

getterssetters与对象的属性相关,不适用于变量赋值,就像在您的问题中一样。

class extends在这里并不真正相关。

检查此例如[1]:从MDN

+0

是的,我意识到这是可能的,我只是不想这样做。 – JacobTDC

+0

恐怕变量赋值不是你可以在JavaScript中“吸气”的东西(我甚至不确定哪种语言支持这个)。 – Dekel

+0

谢谢你的澄清。 – JacobTDC

0

这实际上以及在MDN Working with Objects, Defining getters and setters描述采取

var language = { 
 
    set current(name) { 
 
    this.log.push(name); 
 
    }, 
 
    log: [] 
 
} 
 

 
language.current = 'EN'; 
 
console.log(language.log); // ['EN'] 
 

 
language.current = 'FA'; 
 
console.log(language.log); // ['EN', 'FA']

1代码 - 本文提供吸气剂的一个简单的例子和在JavaScript中使用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) 
+0

您能否指点我描述的页面,因为我一直在查看过去30分钟内的确切页面,并且看起来都一样。 – JacobTDC

+0

我提供的第一个链接直接指向上述示例(具有在“b”属性中定义的getter的示例)。 – mdziekon

+0

我用两个例子编辑了我的答案,也许这会有所帮助。 – mdziekon

0

你可以使用Object.defineProperty()以定义属性的设置:

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