Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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
在apply(Javascript)的重新声明中调用Function.prototype.apply_Javascript_Function Prototypes_Native Methods - Fatal编程技术网

在apply(Javascript)的重新声明中调用Function.prototype.apply

在apply(Javascript)的重新声明中调用Function.prototype.apply,javascript,function-prototypes,native-methods,Javascript,Function Prototypes,Native Methods,在学习Javascript时,我尝试重新声明函数的apply属性。到目前为止没有问题 function foo() { return 1; } alert(foo()); // 1 alert(foo.apply(null)); // 1 foo.apply = function () { return 2; } alert(foo()); // 1 alert(foo.apply(null)); // 2 现在,我尝试让apply做更多的事情,并将其称为“旧”apply(如日志记录) 我明

在学习Javascript时,我尝试重新声明函数的apply属性。到目前为止没有问题

function foo() { return 1; }
alert(foo()); // 1
alert(foo.apply(null)); // 1
foo.apply = function () { return 2; }
alert(foo()); // 1
alert(foo.apply(null)); // 2

现在,我尝试让apply做更多的事情,并将其称为“旧”apply(如日志记录)

我明白了

TypeError:在[object Window]上调用了Function.prototype.apply, 哪一个是对象而不是函数


我试过了

foo.apply = function() {
   alert("A");
   return arguments.callee[Function.prototype.apply](null);
}
alert(foo.apply(null));
我明白了

TypeError:对象函数(){alert(“A”);返回参数的属性“function apply(){[native code]}”不是函数。calleeFunction.prototype.apply;}



有没有什么真正的方法可以让我的尝试成为共犯?还是由于Function.prototype.apply是本机代码而受到限制?

apply
希望在函数上应用(是的,完全使用自身),而您使用它的方式(通过
old()
)使其成为全局对象(
窗口
)。所以你可以这样做:

var old = foo.apply; // === Function.prototype.apply
foo.apply = function() {
    // "this" is the function foo
    alert("A");
    return old.apply(this, arguments); // applying the (old) apply function on foo
    // or better without any arguments:
    return old.call(this); // like this(); which is foo()
}
alert(foo.apply(null));

// and the call solution with an argument:
foo.apply = function(context) {
    return old.call(this, context);
    // like this.call(context);
    // which is foo.call(context)
    // which is like context.foo()
}

还可以查看文档中的和“方法”(尽管我们不是将
old
用作方法,而是用作纯函数)。

是的
apply
希望在函数上应用(是的,完全使用自身),而您使用它的方式(通过
old()
)使其成为全局对象(
窗口
)。所以你可以这样做:

var old = foo.apply; // === Function.prototype.apply
foo.apply = function() {
    // "this" is the function foo
    alert("A");
    return old.apply(this, arguments); // applying the (old) apply function on foo
    // or better without any arguments:
    return old.call(this); // like this(); which is foo()
}
alert(foo.apply(null));

// and the call solution with an argument:
foo.apply = function(context) {
    return old.call(this, context);
    // like this.call(context);
    // which is foo.call(context)
    // which is like context.foo()
}

还可以查看文档中的和“方法”(虽然我们使用的不是
old
,而是纯函数)。

它在chrome中运行良好…@Ioxxy哪个版本?我粘贴的输出来自Chrome的控制台:/您的第一个解决方案使用Chrome(v25)。您使用的浏览器是什么?我做了一些类似的事情,添加了对类似数组的对象的支持,作为不支持它的浏览器的参数。但是我这里没有代码,所以我稍后会发布。它在chrome中运行良好…@Ioxxy哪个版本?我粘贴的输出来自Chrome的控制台:/您的第一个解决方案使用Chrome(v25)。您使用的浏览器是什么?我做了一些类似的事情,添加了对类似数组的对象的支持,作为不支持它的浏览器的参数。但是我这里没有代码,所以我稍后会发布。