使用 get 和 set 作为对象文本的属性名称通常是否安全,如下所示:
var myObject={
get: 'value1',
set: 'value2'
}
Get 和 set 在 javascript 中似乎不是保留字,但我担心这可能会导致与某些内置行为发生冲突。特别是get和set似乎在Object.defineProperties
方法中有一些非常独特的行为:
Object.defineProperties(someObject,{
'Property1':{
get:function(){
return property1;
},
set:function(val){
property1=val;
},
enumerable:true;
}
});
在此内置行为中,get
和 set
不被视为普通属性,而是在访问或分配someObject.Property1
时实际执行其各自的函数。
由于它们在Object.defineProperties
中的使用方式,我一直将get
和set
视为特殊的保留字。所以我的问题是,这是一个很好的经验法则,还是我应该学会停止担心,只要语义上合适,就使用get
和set
?
是的,这是安全的。 get
和set
始终被视为正常属性。它们用于在属性描述符中定义 getter 和 setter 这一事实是完全无关紧要的。
不安全属性的一个例子是valueOf
,因为它实际上改变了对象的行为方式:
console.log(+{}); // NaN
console.log(+{ valueOf: () => 5 }); // 5
<</div>
div class="one_answers"> get
和 set
是传递给 Object.defineProperties
的对象中的有效属性这一事实证明了使用 get
和 set
作为属性名称是安全的。
get
和set
在 JavaScript 中唯一具有特殊含义的时候是当你创建一个 getter 或 setter 时,但语法是不同的,所以与属性名称没有冲突。
javascript中描述的setter getter机制,我没有看到任何冲突或理由认为它不安全,除非其他人也这样做,所以小心其他库覆盖