2018/02/03
var obj = {
key: 'value'
}var obj = {
key: 'value'
}var obj = {
key: 'value'
}writable
configurable
enumerable
value
get
set
var obj = { prop1: 'prop1', prop2: 'prop2' };
Object.getOwnPropertyDescriptor(obj, 'prop1', 'prop2');
// {
// value: "prop1",
// writable: true,
// enumerable: true,
// configurable: true
// }Object.getOwnProperyDescriptor(obj, 'prop');
Test
Literals
Property Descriptor
After ES5
var obj = {};
Object.defineProperty(obj, 'prop', {
value: 'This is prop',
writable: false,
configurable: true,
enumerable: true
});
console.log(obj.prop); // "This is prop"Object.defineProperty(obj, 'prop', descriptor);
var obj = {};
Object.defineProperties(obj, {
'prop1': {
writable: false,
configurable: true,
enumerable: true,
value: 'This is prop1'
},
'prop2': {
writable: false,
configurable: true,
enumerable: true,
value: 'This is prop2'
}
});
console.log(obj.prop1); // "This is prop1"
console.log(obj.prop2); // "This is prop2"Object.definedProperties(obj, properties);
Read-only or not
can re-config or not
can delete or not
How about Global variable?
( they're window properties )
included when property iterated or not
var obj = {},
innerObj = { innerProp: 'This is innerProp' };
Object.defineProperty(obj, 'prop1', {
value: innerObj,
writable: false,
configuration: true,
enumerable: true
});
obj.prop1 = {};
console.log(obj.prop1); // { innerProp: "This is innerProp" }
obj.prop1.innerProp = 'innerProp changed!';
console.log(obj.prop1); // { innerProp: "innerProp changed!" }Two declare ways:
Object literal
Property descriptor
Cooperate
( with a container )
getter & setter
A property which has value
value & writable
vs
var obj = {}
Object.defineProperty(obj, 'prop1', {
get: function() {
return 'This is prop1';
},
value: 'test',
writable: true
}); // Uncaught TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>Two-way binding
Container:Dom elements
// HTML
<input type="text" id="myInput">// JS
var obj = {
_myInput_ : document.getElementById('myInput'),
get input() {
return this._myInput_.value;
},
set input(value) {
this._myInput_.value = value;
}
}
obj.input = 'hey';
// type something into input
console.log(obj.input);