Object.defineProperty 和 Object Property 文字之间的区别
Difference between Object.defineProperty and object property literal
人与人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
但在我看来,并没有什么特别显着的差异,如果您没有弄乱属性描述符。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript 中 Function.prototype 和 Object.prototype 之间的区别
- Object.observe 和 Object.watch 有什么区别
- Object.assign 和 just as assign 之间的区别
- 使用 Object.create() 和 Object.assign() 创建对象有什么区别?
- Object.defineProperty 和 Object Property 文字之间的区别
- Object.getPrototypeOf(x)和x.constructor.prototype之间的区别
- 使用Object.assign和class/extends有什么区别
- JavaScript模式-Facade和Object文本模式之间的区别
- scalajs作用域中的object和js中的*same* object有什么区别?全球范围
- 查询JavaScript Object与JSOn Object的区别
- Object.create(foo)和new Object(foo)之间的区别
- proto link和Object.create的区别
- object.setAttribute()和object.style有什么区别?
- 使用Object.create()和使用赋值操作符有什么区别?
- obj.prototype和Object.getPrototypeOf(obj)之间有什么区别
- Javascript在Object Literal方法中直接调用方法和使用Object.create方法的区别
- javascript - RegExp Instance和RegExp Object的区别
- prototype.constructor和内置Object()之间有什么区别
- 在object .create中使用对象字面量和函数表达式有区别吗?