class Person {
constructor(){}
set name(){
}
// delete get name() {}
}
你可以禁用属性的getter吗?是否有意想不到的后果?我应该扔吗?返回undefined?
答案 0 :(得分:2)
如果您已经在课堂上定义了课程,那么 就没有name
的获取者;尝试从name
的实例中阅读Person
将会产生undefined
(好像name
根本没有为该实例定义)。这是由规范中的OrdinaryGet
abstract operation定义的,它表示如果属性是访问者属性但其get
操作是undefined
,则获取属性的结果为{{1} }。 (更多内容见下文。)
如果你想尝试阅读undefined
一个错误,那么是的,实现一个getter并抛出。
两者的例子:
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
属性,对吗?"但不,它不是。该对象具有该属性,它只是没有getter。
如果它表现得像没有属性,JavaScript引擎会查看原型来找到它,我们可以从上面的spec链接看到,从这个例子中可以看出它没有:
name

答案 1 :(得分:0)
我会在getter中throw
例外,以避免无意的错误使用。