应用()方法定义



函数的应用()方法与调用方法相同,其区别在于接收参数的方式不同。

应用()方法接收两个参数,一个是对象,另一个是参数数组。



应用()的作用



1。它用于扩展函数的作用域。



实例:




VaR的颜色';
var o = {颜色:蓝};
功能saycolor(){
console.log(的颜色);
}
(saycolor); / /红
saycolor.apply(O); / /蓝


在这里,函数通过应用()方法动态地绑定到对象o,当这指向O对象并得到结果蓝色。



2。对象不必与方法有任何耦合关系。



下面是几个如何通过应用解决这个耦合的例子。




VaR的颜色';
var o = {颜色:蓝};
功能saycolor(){
console.log(的颜色);
}
o.saycolor = saycolor;
(o.saycolor); / /蓝


首先,函数被放置在对象O中,对象和方法紧密耦合在一起,方法调用必须通过对象O。



没有应用()和调用()方法作为灵活使用。

上述代码的重构,获得示例中的代码。




VaR的颜色';
var o = {颜色:蓝};
功能saycolor(){
console.log(的颜色);
}
(saycolor); / /红
saycolor.apply(O); / /蓝


对象不绑定到任何方法,但只有当您需要使用函数的应用程序或调用方法动态绑定时才可以。



有对象和方法之间没有耦合,也可以通过绑定完成()方法提供的ES5



3,变参数函数传递的实现



计算任意数目的平均值的下列函数




平均(,);
平均数();
平均(,,,,,,,,);
平均(,,,,,,,,,);


平均函数是变量或变量函数的一个例子(函数中的变量个数是指它所期望的参数数)。



当然,这个函数也可以写成数组的形式。




averageofarray({,});
averageofarray({ });
averageofarray({ ,,,,,,,, });
averageofarray({ ,,,,,,,,, });


可变参数的功能更简洁、更优雅,可变参数函数有一个方便的语法,至少让调用者知道预先提供了多少参数。



如果我有这样的数组




VaR得分= getallscores();


如何用平均函数计算平均数



1。变量参数函数的版本。

这可以与应用程序()方法一起使用,因为函数不引用这个变量,所以第一个参数被传递到null:


VaR得分= getallscores();
average.apply(空分);


2。直接参数是数组的形式。



这可以直接传递到数组参数中。




VaR得分= getallscores();
averageofarray(分数);


以上两种形式,个人感觉都可以,但第二种更简单。你知道更多的方法,可以很容易处理,当你遇到一个函数写的人,你不需要重新配置代码。



4。变参数法传递值的实现



示例:缓冲区对象包含一个变量参数的追加方法,它将元素添加到函数中的状态数组中。


var缓冲区= {
状态:{ },
附加:函数(){
对于(var i =,= arguments.length;我< n;i++){
This.state.push(参数{我});
}
}
};


此时,追加方法可以接受任意数量的参数。




Buffer.append(你好,);
Buffer.append('firtname ',' ','lastname ','!');
Buffer.append('newline);


形如


Buffer.append(arg1,arg2,ARG3,…)


通过应用方法的这个参数,我们可以指定一个可计算数组来调用追加方法。


buffer.append.apply(缓冲区,getinputstrings());


注意:这里的缓冲区非常重要,如果传递了不同的对象,则追加方法将尝试修改错误对象的状态属性。



提示

使用应用程序方法指定一个可计算的参数数组来调用一个变量参数函数。

应用方法的第一个参数为可变参数方法提供了接收器。



附录I



平均函数


函数平均(){
var args = { }。slice.call(参数);
VaR和= args.reduce(功能(沪指,Cur){
回沪指+电流;
});
返回parseInt(和 /参数。长度);
}


averageofarray功能




功能averageofarray(ARR){
VaR和= arr.reduce(功能(沪指,Cur){
回沪指+电流;
});
返回parseInt(和/ arr.length,);
}


ES5绑定()方法



此方法创建一个函数实例,该函数的值绑定到传递给绑定()函数的值。

例如


VaR的颜色';
var o = {颜色:蓝};
功能saycolor(){
console.log(的颜色);
}
无功osaycolor = saycolor.bind(O);
(osaycolor); / /蓝


与较低版本兼容,请使用以下版本作为参考:




如果(!函数.原型.绑定){
function.prototype.bind =功能(o){
如果(typeof这!= 'function){
事情可能ECMAscript / /接近
iscallable功能 / /内部
把新的TypeError(function.prototype.bind -什么是想肯定不是);
}
无功aargs = { }。slice.call(论据),
这ftobind =,
浮点空操作=函数(){ },
fbound =函数(){
返回ftobind.apply(这是浮点空操作:o,
AArgs.concat(array.prototype.slice.call(参数)));
};
如果(这个原型){
没有一个原型属性 / / function.prototype
fnop.prototype = this.prototype;
}
fbound.prototype =新的浮点空操作();
返回fbound;
};
}