我想了解以下行为,因为对这个网站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)
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因为你实际上只传递2和3(两个参数)方法(而不是三个).
所以最后,代码正在做类似的事情:
var obj = new Number(1);
obj.method = Foo.prototype.method;
obj.method(2,3);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |