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