apply is a 成员函数一个函数对象的。假设我们有:
function saySomething(thing, anotherThing) {
alert(this + " says " + thing + " and " + anotherThing);
}
然后我们可以使用:
saySomething.apply(document, ["hello", "goodbye"]);
这将调用该函数并将数组的值作为参数提供给该函数。第一个参数指定了context函数的(或者,什么this
等于函数运行时的值)。
您还应该知道arguments
是一个特殊变量,它保存传递给函数的所有参数的数组。所以在这里,this.init.apply(this, arguments)
意味着init
函数被调用并传递了传递给函数的所有参数klass
构造函数。
在实际实施中,我认为init
会期待争论。考虑一下如果没有apply
:
var klass = function(arg1, arg2, arg3) {
init(arg1, arg2, arg3);
}
klass.prototype.init = function(arg1, arg2, arg3) {}
如果您想添加arg4
要初始化,您需要将其添加到三个位置!有了klass
透明地将其所有参数传递给init
,你可以让你的代码变得不那么脆弱。