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的内部方法
}
posted @ 2016-09-03 20:21  阿巴阿巴55996  阅读(80)  评论(0)    收藏  举报