2017-08-09 27 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