Object.defineProperty 和 Object Property 文字之间的区别

Difference between Object.defineProperty and object property literal

本文关键字:Object 区别 之间 Property defineProperty 文字      更新时间:2023-09-26

人与人2的name属性之间有什么区别(如果有的话)?

var person = function(){
    var _name;
    var _person = {};
    Object.defineProperties(_person, {
        name: {
            get: function(){ return _name },
            set: function(n) { _name = n; },
            enumerable: true,
            configurable: true
        }
    });
    return _person;
}();
person.name='john';
console.log(person.name);
function Person2()
{
    this.name = undefined;
}
var person2 = new Person2();
person2.name = 'john';
console.log(person2.name);

defineProperties只是让你对定义的属性有更多的权力。如果使用点表示法定义属性,就像使用 Person2 一样,则该属性默认情况下是可写、可删除和可枚举的。

您保留了 Person1 的默认值,其中一个是 writeable: false ,因此除非显式使用资源库,否则无法重新分配属性。换句话说,您将无法使用点表示法来更改该属性。

通常,实际上

并不需要这种行为,因此我会小心使用它,因为它可能会导致意外结果。

实际差异?井:

Object.getOwnPropertyDescriptor(person, 'name') 

将返回一个不等效的值

Object.getOwnPropertyDescriptor(person2, 'name') 

此外,这两个函数调用将具有不同的效果:

Object.defineProperties(person, {name: {set: undefined}});
person.name; // john
Object.defineProperties(person2, {name: {set: undefined}});
person2.name; // undefined

但在我看来,并没有什么特别显着的差异,如果您没有弄乱属性描述符。