簡體   English   中英

什么類型的對象/屬性是原型getter和setter?

[英]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(){} }不是有效的語法,在給定getset運算符的情況下是什么使它有效? { 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'的getter

這意味着針對此對象的foo引用將返回undefined

你可以在這里看到行為:

http://jsfiddle.net/VHAhA/

如果你認為get是近似於foo: function (我知道它不是很好,但它確實聲明了“我將定義一個函數 - 將它分配給它”,那么它在語法上類似於:

{ foo: function foo() {} }

它無法與{ foo(){} }進行比較,因為在此示例中,您不會告訴JavaScript您將要定義某些內容,也不會告訴它何時放置它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM