Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以修改但不能替换方法';什么是原型?_Javascript_Object_Javascript Objects - Fatal编程技术网

Javascript 可以修改但不能替换方法';什么是原型?

Javascript 可以修改但不能替换方法';什么是原型?,javascript,object,javascript-objects,Javascript,Object,Javascript Objects,假设我有一个方法Object.getNumber(),我想对该方法的结果做一个小的更改,例如在结果中添加1,不,我无法访问该方法的代码 有没有办法用它的原型做到这一点?我想我需要在defineProperty调用中访问该方法 Object.defineProperty(Object.prototype,'getNumber',{get:function(){…})方法只是一个可以传递的函数,因此可以一个接一个地应用该函数: const getNumber = Object.prototype.g

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

有没有办法用它的原型做到这一点?我想我需要在defineProperty调用中访问该方法


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

方法只是一个可以传递的函数,因此可以一个接一个地应用该函数:

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

但是修改本机原型不是好的做法,尤其是
对象。原型
,因为这会影响太多的事情。

方法只是一个可以传递的函数,因此可以一个接一个地应用该函数:

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

但是修改本机原型不是好的做法,尤其是
Object.prototype
,因为这会影响太多的事情。

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

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

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

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

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

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

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

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

如果方法是
Object.getNumber
,那么分配给
Object.prototype.getNumber
将没有帮助。您需要覆盖
对象.getNumber
本身。这真的是本机
对象的方法,还是某个自定义名称空间?@Bergi我正在修改元素中的本机方法。如果该方法是
对象.getNumber
,则分配给
对象.prototype.getNumber
不会有帮助。您需要覆盖
对象。getNumber
本身。这真的是本机
对象的方法,还是某个自定义名称空间?@Bergi我正在修改元素中的本机方法。apply函数回答了我的下一个问题,您已经掌握了!谢谢apply函数回答了我的下一个问题,您已经掌握了!谢谢