2016-01-21 57 views
1

我創建getter和setter函數,像這樣:爲什麼我們需要在創建對象時額外添加'get'和'set'?

var obj = { 
    a: 7, 
    get b() { 
     return 1; 
    }, 
    set c(a) { 
     this.a = 2; 
    } 
} 

我再嘗試調用函數b和c。 如果我打電話obj.c(),出現以下錯誤:

Uncaught TypeError: obj.c is not a function(…)

同爲obj.b()

創建對象時,'get'和'set'是做什麼的?

+1

你有什麼是getter和setter函數等等只是訪問'alert(o1.b)'將會調用'b()'函數 –

+0

同樣的方法設置'o1.c = 4'將調用setter函數 –

+0

'b'和'c'不是函數 – Hacketo

回答

2

getset關鍵字是創建吸氣二傳手功能。您不明確地稱它們爲—但是當您對屬性(setter)進行賦值或檢索屬性(getter)的值時,它們隱式稱爲

,當你做這樣的事情

var x = o1.b; 

setter方法會當你做

o1.c = 12; 

請注意,你不「要」使用setter和getter被稱爲吸氣將被稱爲功能;它們是可選的,並且它們是ES2015的一項功能。舊的JavaScript環境不支持該機制。

0

因爲getter和setter的全部重點都是爲了不讓它們作爲函數使用,而是在你使用get/set屬性的時候在後臺運行一個函數。

例如,這使得它,這樣obj1.b讀取時會無論你將其設置爲加100,使用obj1.a來存儲值:

var o1 = { 
    a:7, 
    get b(){return this.a;}, 
    set b(val){this.a=val+100;} 
} 

alert(o1.b); // 7 cuz nothing changed yet 
o1.b = 10; 
alert(o1.b); // now 110 
相關問題