Javascript 为什么使用Function.prototype.bind.apply?
我了解Javascript 为什么使用Function.prototype.bind.apply?,javascript,constructor,Javascript,Constructor,我了解函数.prototype.bind.apply的工作原理。假设以下定义: var Constructor = function(someArgument){ //constructor body here }; var creator = function(ctor, args){ args.unshift(null); //or anything else to make 'bind' succeed return new (Function.prototype
函数.prototype.bind.apply
的工作原理。假设以下定义:
var Constructor = function(someArgument){
//constructor body here
};
var creator = function(ctor, args){
args.unshift(null); //or anything else to make 'bind' succeed
return new (Function.prototype.bind.apply(ctor, args));
};
var creator2 = function(ctor, args){
return new ctor(args);
};
var obj = creator(Constructor, ['someVar']);
var obj2 = creator2(Constructor, ['someVar']);
creator
和creator2
都可以工作,那么为什么要选择creator
而不是creator2
?调用creator2
将args
数组作为单个数组参数传递给构造函数
调用
creator
将数组中的每个项目作为一个单独的参数传递(通过apply
)。不确定这解释了为什么应该选择一个而不是另一个。谢谢,这是我忽略的一些(重要)细节。这也解释了为什么返回new(ctor.bind(null,args))代码>不适合。@RobG:他们做两件不同的事情。您应该选择您需要的选项。OP以“我了解Function.prototype.bind.apply是如何工作的…”开头,因此我天真地假设他/她知道它是如何工作的。也许我应该将其改为“我认为我了解…如何工作的”。apply只是在调用函数时设置此值的一种方便方法,这样您就可以传递参数了(例如)不必构建包含每个参数的调用表达式。我认为除了方便之外,没有什么值得推荐的。如果有零个或一个参数,那么它对调用没有任何好处。