在javascript中传递参数

ant*_*njs 2 javascript

我想了解以下行为,因为对这个网站javascript garden的解释对 我来说还不够.

如果您能够对内联评论中的问题给出明确的解释,将不胜感激.

这里的例子如下:

function Foo() {}

Foo.prototype.method = function(a, b, c) {
    console.log(this, a, b, c);
};

Foo.method = function() {
    Function.call.apply(Foo.prototype.method, arguments);
};


Foo.prototype.method(1,2,3) // Foo { method=function()} 1 2 3 //this output is obvious
Foo.method(1,2,3)  // Number {} 2 3 undefined // I want understand why the first argument is a number and the last one is undefined
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 7

Function.call.apply(Foo.prototype.method, arguments);
Run Code Online (Sandbox Code Playgroud)

是相同的

Foo.prototype.method.call(arguments[0], arguments[1], arguments[2], ...);
Run Code Online (Sandbox Code Playgroud)

在您的情况下,它与以下内容相同:

Foo.prototype.method.call(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

这意味着,在里面Foo.prototype.method,this将引用1,this一如既往地引用一个对象(在非严格的环境中),1被转换为一个Number对象.

最后一个值是undefined因为你实际上只传递23(两个参数)方法(而不是三个).

所以最后,代码正在做类似的事情:

var obj = new Number(1);
obj.method = Foo.prototype.method;
obj.method(2,3);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在严格模式下,`this`不再隐式转换为数字,例如:`(function(){'use strict'; return typeof this;}).call(1)=='number'` (3认同)