defineProperty的使用
const object1 = {};
Object.defineProperty(object1, 'property1', {
value: 42,
});
object1.property1 = 24;
console.log(object1.property1);
const object1 = {property1:42};
Object.defineProperty(object1,'property1',{
value: 24
});
object1.property1 = 18;
console.log(object1.property1);
const property = Object.getOwnPropertyDescriptor(object1, "property1")
console.log(property);
var o = {};
o.a = 1;
Object.defineProperty(o, "a", {
value: 1,
writable: true,
configurable: true,
enumerable: true
});
Object.defineProperty(o, "a", { value : 1 });
Object.defineProperty(o, "a", {
value: 1,
writable: false,
configurable: false,
enumerable: false
});
var myObj = {a:2};
myObj.a = 3;
myObj.a;
Object.defineProperty(myObj,"a",{
value:4,
writable:true,
configurable:false,
enumerable:true
});
myObj.a;
myObj.a = 5;
myObj.a;
Object.defineProperty(myObj,"a",{
value:4,
writable:true,
configurable:true,
enumerable:true
});
Object.defineProperty(myObj,"a",{
value:4,
writable:true,
configurable:false,
enumerable:false,
});
Object.defineProperty(myObj,"a",{
value:4,
writable:false,
configurable:false,
enumerable:true,
});
myObj.a = 333;
myObj.a;
defineProperty双向绑定的实现
<div></div>
<input type="text">
<script>
let obj = {};
function watch(obj,name,callback){
let value = obj.name;
Object.defineProperty(obj,name,{
set(msg){
value = msg;
callback(value);
},
get(){
return value;
}
});
};
function doSomething(value){
document.querySelector('div').innerHTML = value;
document.querySelector('input').value = value;
}
document.querySelector('input').addEventListener('input',(e) => {
obj['msg'] = e.target.value;
});
watch(obj,'msg',doSomething);
</script>