get
运算符之间是否存在真正的区别:
var obj = {
get prop () {
//insert code here
}
};
并使用defineProperty
:
var obj;
Object.defineProperty(obj, "prop", {
get: function () {
//insert code here
}
}
MDN页面说兼容性差不多。
答案 0 :(得分:8)
Object.defineProperty
默认为enumerable: false
和configurable: false
,而对象文字的getter语法默认为enumerable: true
和configurable: true
。这可以通过Object.getOwnPropertyDescriptor(obj, "prop")
验证。
这意味着,在前一种情况下,prop
将显示在for
- in
循环和Object.keys(obj)
中,而执行delete obj.prop
将失败(吵闹)在严格模式下,否则静默)。对于后一种情况,情况恰恰相反。
请注意,Object.defineProperty
(或Object.create
或Object.defineProperties
)将允许您单独选择属性的可配置性和可枚举性,而对象文字的getter语法则不会。