簡體   English   中英

禁用ES6類中的吸氣劑?

[英]Disabling a getter in an ES6 class?

class Person {
   constructor(){}

   set name(){

   }

   // delete get name() {} 
}

您可以禁用屬性的吸氣劑嗎? 有意想不到的后果嗎? 我應該丟嗎? 返回未定義?

如果你有,你到過那里將它定義你的類,有沒有消氣的name ; 嘗試從Person實例的name中讀取name將產生undefined (好像根本沒有為該實例定義name )。 這是由規范中的OrdinaryGet抽象操作定義的,該操作表示如果某個屬性是訪問器屬性,但其get操作undefined ,則獲取該屬性的結果將是undefined (有關此內容,請參見下文。)

如果您想使讀取name錯誤,那么可以,實現一個吸氣劑並拋出。

兩者的示例:

 class NoError { set name(value){ } } let n = new NoError(); console.log(n.name); class HasError { get name() { throw new Error("'name' cannot be read"); } set name(value){ } } let h = new HasError(); console.log(h.name); 

這是一個不使用類的簡單示例:

 var obj = { set name(value) { } }; console.log(obj.hasOwnProperty("name")); // true console.log(obj.name); // undefined 

現在您可能在想:“這就像對象沒有name屬性,對嗎?” 但是,不是。 對象具有屬性,只是沒有吸氣劑。

如果它的行為好像沒有該屬性,則JavaScript引擎會查看原型以找到它,並且我們可以從上面的spec鏈接和此示例中看出它沒有:

 var proto = { name: "Name on prototype" }; var obj = Object.create(proto, { name: { set(value) { } } }); console.log(obj.hasOwnProperty("name")); // true console.log(obj.name); // undefined 

我會在吸氣劑中throw一個異常,以避免意外的不正確使用。

暫無
暫無

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

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