将数组 arr 中的元素作为调用函数 fn 的参数
输入例子:
argsAsArray(function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!'])
输出例子:
Hello, Ellie!
function argsAsArray(fn, arr) {
return fn.apply(this, arr);
}
apply函数中第一个参数为绑定fn函数中的this,可是如果fn函数中没有this变量,如何把apply中第一个参数省略去?
建議是改良下函數:
function argsAsArray(fn, arr, context) {
return fn.apply(context, arr);
}
這樣碰到需要綁定上下文的狀況下,就可以傳值,那假如沒傳就是 undefined
,javascript
會自動讓 this
指向 window
(瀏覽器環境)。
主要是避免碰到下面狀況:
var person = function(name) {
this.name = name
}
person.prototype.greeting = function(extra) {
console.log(this)
return this.name + ' say :' + ' Hello!' + extra
}
var andy = new person('andy')
// 如果不綁定 andy 到 context ,this.name 將會找不到值
console.log(argsAsArray(andy.greeting, ['Love U']))
// 用上面方式就可以綁定正確的上下文
console.log(argsAsArray(andy.greeting, ['Love U'], andy))
直接传人null
传入 null 即可