![](/img/trans.png)
[英]What is the "standard way" for adding getter and setter to Object.prototype?
[英]What type of object/property is a prototype getter and setter?
閱讀John Resig關於Javascript getter和setter的文章我在Javascript中看到了一個我不熟悉的結構:
Field.prototype = {
get value(){
return this._value;
},
set value(val){
this._value = val;
}
};
Prototype是一個像許多其他人一樣的對象,但這里的get和set部分似乎並不熟悉。 他們提到了什么名字? 它們看起來不像對象的典型屬性(遵循"key":"value"
語法),它們看起來也不像標准函數。
這個簡單的語法糖是JS引擎轉化為更易識別的東西嗎?
更新:
我的問題的真正關鍵是:由於{ foo(){} }
不是有效的語法,在給定get
或set
運算符的情況下是什么使它有效? { get foo(){} }
我花了一點時間閱讀以確定如何使用它,所以雖然@RGraham指出了很多文檔( https://developer.mozilla.org/en-US/docs/Web/JavaScript / Reference / Operators / get ),我想我會提供一個用法示例。
基本上, “get”和“set”運算符允許您覆蓋直接訪問成員變量時將獲得的行為。
這意味着你可以,例如:
所有上述內容(當然)都可以通過定義對象上的函數來完成,不同之處在於必須像這樣調用函數。
使用此表示法,即使符號似乎引用成員變量,也會調用這些函數。
我個人不喜歡它 - 我想它可能導致一些非常混亂的代碼,特別是在調試時。 但是如果你想要......那就可以使用......
例
var Field = {
get value(){
return this._value;
},
set value(val){
this._value = val + 1;
}
};
Field.value = 100
console.log( Field.value );
將輸出:
101
在這里小提琴: http : //jsfiddle.net/zV8Kf/1/
關於特定的“為什么{ get foo(){} }
有效?” 題:
我讀到這個:
這意味着針對此對象的foo引用將返回undefined
你可以在這里看到行為:
如果你認為get
是近似於foo: function
(我知道它不是很好,但它確實聲明了“我將定義一個函數 - 將它分配給它”,那么它在語法上類似於:
{ foo: function foo() {} }
它無法與{ foo(){} }
進行比較,因為在此示例中,您不會告訴JavaScript您將要定義某些內容,也不會告訴它何時放置它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.