如何从对象的原型中删除属性p
?
var Test = function() {};
Object.defineProperty(Test.prototype, 'p', {
get: function () { return 5; }
});
Object.defineProperty(Test.prototype, 'p', {
get: function () { return 10; }
});
这将产生TypeError:无法重新定义属性:p。有没有一种方法可以删除该属性并重新添加它?还是可以在创建属性后设置
configurable
属性? 最佳答案
如果您能够在要避免的代码之前运行代码,则可以尝试劫持Object.defineProperty
以防止添加该属性:
var _defineProperty = Object.defineProperty;
Object.defineProperty = function(obj, prop, descriptor) {
if(obj != Test.prototype || prop != 'p')
_defineProperty(obj, prop, descriptor);
return obj;
};
或者,您可以使其可配置,以便以后可以对其进行修改:
var _defineProperty = Object.defineProperty;
Object.defineProperty = function(obj, prop, descriptor) {
if(obj == Test.prototype && prop == 'p')
descriptor.configurable = true;
return _defineProperty(obj, prop, descriptor);
};
最后,您可以还原原始的一个:
Object.defineProperty = _defineProperty;
关于javascript - 如何从原型(prototype)重新定义属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28218395/