[英]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.