可以修改但不能替换方法的原型吗?

时间:2018-09-24 19:49:29

标签: javascript object javascript-objects

比方说,我有一个方法Object.getNumber(),我想对该方法的结果做些小改动,例如,将1加到结果中,没有,我无法访问该方法的代码。

有什么办法可以通过其原型做到这一点?我需要在我想的defineProperty调用内访问该方法。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

方法只是一个可以传递的函数,因此您可以简单地将函数依次应用:

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

但是修改本机原型不是一个好习惯,尤其是Object.prototype,因为它会影响太多事情。