【问题标题】:Possible to modify but not replace a method's prototype?可以修改但不能替换方法的原型?
【发布时间】:2018-09-24 19:49:28
【问题描述】:

假设我有一个 Object.getNumber() 方法,我想对该方法的结果做一个小的更改,例如将结果加 1,但我无法访问该方法的代码。

有什么方法可以用它的原型来做到这一点?我想我需要在 defineProperty 调用中访问该方法。

Object.defineProperty(Object.prototype, 'getNumber',{ get: function () { ... } });

【问题讨论】:

  • 如果方法是Object.getNumber,那么分配给Object.prototype.getNumber 将无济于事。您将需要覆盖 Object.getNumber 本身。
  • 这真的是原生Object的方法,还是一些自定义的命名空间?
  • @Bergi 我正在修改 Element 中的本地方法。

标签: javascript object javascript-objects


【解决方案1】:

您总是可以替换原型中的原始方法,但将原始方法保留在局部变量中的某个位置。像这样的:

Object.prototype.getNumber = (function() {
    let originalFn = Object.prototype.getNumber;

    return function() {
        let originalResult = originalFn.apply(this, arguments);

        return originalResult + 1;
    };
})();

【讨论】:

  • apply 函数回答了我的下一个问题,你在上面!谢谢!
【解决方案2】:

一个方法只是一个你可以传递的函数,所以你可以简单地一个接一个地应用这个函数:

const getNumber = Object.prototype.getNumber;
Object.prototype.getNumber = function() {
  const result = getNumber();
  return result + 1;
};

但是修改原生原型并不是一个好习惯,尤其是Object.prototype,因为这会影响太多东西。

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多