use*_*783 7 javascript prototype getter-setter
我有一个o原型对象p:
var p = {}
var o = Object.create(p)
Run Code Online (Sandbox Code Playgroud)
可以向a对象添加属性o,然后向原型添加同名的setter p:
o.a = 1
Object.defineProperty(p, 'a', {set: function(value) {}});
console.log(o.a); // 1
Run Code Online (Sandbox Code Playgroud)
但是,如果我们尝试在setter 之后添加属性,则不会将其添加到o- 而是调用setter:
Object.defineProperty(p, 'a', {set: function(value) {}});
o.a = 1
console.log(o.a); // undefined
Run Code Online (Sandbox Code Playgroud)
是否可以先定义setter,然后绕过它以a直接添加属性o?
您可以defineProperty再次使用并设置writable为true。您可能还想设置enumerable,configurable因为它们默认为false. 您不需要将value默认设置为undefined,但我认为它更清晰。
var p = {}
var o = Object.create(p)
Object.defineProperty(p, 'a', {set: function(value) {console.log("value:", value)}})
o.a = "test" // logs "value: test"
// override setter
Object.defineProperty(o, 'a', {value:undefined, writable:true, enumerable:true, configurable:true})
console.log(o.a); // undefined
o.a = 1
console.log(o.a); // 1
console.log(Object.keys(o))Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |