【发布时间】:2013-03-18 15:50:39
【问题描述】:
有很多问题和答案都涵盖了这种技术,但我似乎无法找到有关如何为 call() 或 apply() 设置所需的 this 上下文的答案。
我明白了
Array.prototype.slice.call(arguments)
有点等价于
arguments.slice()
arguments 被转换为正确的数组对象,但如果我尝试将此约定用于我自己的对象,则它不起作用。我试着写一个小测试这样做:
var Logger = function(){};
Logger.prototype.print = function(msg){
console.log ((new Date()).getTime().toString() + msg);
};
(function(){
var o = {
name: "Hi Bob!",
};
var l = new Logger();
l.print(o.name); //works fine
Logger.prototype.print.call(o.name); //calls print method, but 'msg' is undefined
}());
关于Array.prototype 或arguments 对象是否有什么特别之处可以让函数应用程序在没有必要上下文的情况下工作?
【问题讨论】:
-
没有。只有您的代码“有点等同于”
o.name.print()- 这显然不是您想要的。请参阅 stackoverflow.com/q/6763555/1048572 了解其工作原理。
标签: javascript