call,apply,bind
作用:call,apply(参数为数组),bind的作用是 修改this的指向,从而修改函数的作用域
使用call..的意义是 在面向对象的思想中,把其他对象中的方法应用于本对象中,如果函数在全局中,就不需要call.. 了
可以把call.. 认为是短暂的继承 而不需要与方法有任何耦合关系。 (“借用”)
区别:
call,apply 用于使用 “新的作用域” 调用 “原作用域” 的方法
bind 用于缓存"新作用域" ,返回函数
call,apply的用途
1. 改变this的指向
2. 构成bind函数的一部分
注意,初级错误
arr = ["a","b"]
var func = Array.prototype.join.call
var result = func(arr, "+")
console.log(result)
错误点在: 把 func 等价成
Array.prototype.join.call , 这个表达式中 既存在调用者,由存在方法(未执行), 而 func 实际上 只是一个函数, 没有调用对象或说调用对象是window, 而window不存在call方法Function.prototype.call的伪代码Function.prototype.call = function(newThis) {
var targetFn = this;//!!!!!注意这里,call的目标函数是通过this拿到的!!!!
var args = Array.prototype.slice.call(arguments, 1);
return targetFn.[[Call]] (this = newTHis, arguments = args);//[[Call]]是function的内部方法
}

浙公网安备 33010602011771号