var Assertion = function() {
return { "dummy": "data" };
}
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(this);
}
});
// Insert magic here.
// This needs to be false
console.log(({}).should === undefined);
在ES5中,我有哪些选项可以撤销 defineProperty
调用?
请勿提出愚蠢的建议,例如 Object.defineProperty = function() { }
。
以下代码 Object.defineProperty(Object.prototype, 'should', {})
不能够正常工作
而且 Object.defineProperty(Object.prototype, 'should', { value: undefined })
会在V8引擎中抛出一个Uncaught TypeError: Cannot redefine property: defineProperty
异常。
Object.defineProperty(Object.prototype, 'should', {
set: function() {},
get: function() { return undefined; }
});
抛出相同的错误
delete Object.prototype.should
也不起作用
accessor
,例如obj.foo = 'new value';
?换句话说,为什么我们必须先删除该属性或重新配置它才能摆脱该访问器? - kapreski[[Get]]
和[[Set]]
行为,转而采用用户提供的行为。 - Jamie Ridding