about 7 years ago
I did a little experiment just want to see what's the difference between defining object properties "normally" vs defining them using defineProperty
:
var obj = {};
Object.defineProperty(obj, 'name', {value: 'cheng'} );
console.log(obj.name);
var des = Object.getOwnPropertyDescriptor(obj, 'name');
console.log('Writable: ' + des.writable);
console.log('Configurable: ' + des.configurable);
console.log('Enumerable: ' + des.enumerable);
console.log('getter: ' + des.getter);
console.log('setter: ' + des.setter);
obj.name = 'test';
console.log(obj.name);
var obj2 = { name: 'cheng'};
var des2 = Object.getOwnPropertyDescriptor(obj2, 'name');
console.log('Writable: ' + des2.writable);
console.log('Configurable: ' + des2.configurable);
console.log('Enumerable: ' + des2.enumerable);
console.log('getter: ' + des2.getter);
console.log('setter: ' + des2.setter);
obj2.name = 'test';
console.log(obj2.name);
Here is the output:
"cheng"
"Writable: false"
"Configurable: false"
"Enumerable: false"
"getter: undefined"
"setter: undefined"
"cheng"
"Writable: true"
"Configurable: true"
"Enumerable: true"
"getter: undefined"
"setter: undefined"
"test"
Conclusion
When using defineProperty
, you have to define all of the properties by yourself, otherwise they are default to false
. But if the properties are define normally, then configurable
, enumerable
and writable
are all default to true
.