如何从对象的原型中删除属性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/

10-12 04:11