get运算符和defineProperty之间是否有任何有效的区别?

时间:2011-10-09 03:23:22

标签: javascript

get运算符之间是否存在真正的区别:

var obj = {
    get prop () {
        //insert code here
    }
};

并使用defineProperty

var obj;
Object.defineProperty(obj, "prop", {
    get: function () {
        //insert code here
    }
}

MDN页面说兼容性差不多。

1 个答案:

答案 0 :(得分:8)

Object.defineProperty默认为enumerable: falseconfigurable: false,而对象文字的getter语法默认为enumerable: trueconfigurable: true。这可以通过Object.getOwnPropertyDescriptor(obj, "prop")验证。

这意味着,在前一种情况下,prop将显示在for - in循环和Object.keys(obj)中,而执行delete obj.prop将失败(吵闹)在严格模式下,否则静默)。对于后一种情况,情况恰恰相反。

请注意,Object.defineProperty(或Object.createObject.defineProperties)将允许您单独选择属性的可配置性和可枚举性,而对象文字的getter语法则不会。