自己的简单理解不一定对
-
首先是call和apply
具体使用如下
obj.fn.call(obj, 1, 2)
obj.fn.apply(obj, [1, 2])
call apply 都是ECAMScript 3提供的方法(Function.prototype.call和Function.prototype.apply)
大致来讲call apply都是用来给函数传参数的,
区别在于 apply只接受两个参数而call接受的参数不固定,
但是相同的是他们的第一个参数都是用来指定this指向的。
就比如上面的代码 分别将fn函数的this指向了obj对象 和 obj对象
emmm语文老师对不起
我们在使用时应当注意严格模式和非严格模式的情况
首先严格模式的时候,即
"use strict" //严格模式
function fn(a,b){
console.log(this)
}
fn(1, 2)
//等价于
fn.call(undefined, 1, 2)
fn.apply(undefined, [1, 2])
此时
console.log(this === undefined); // 输出:true
而在非严格模式下当call apply的第一个参数传入undefined的时候,this指向window
-
bind
此处放上饥人谷的例子bind 的作用和 call 与 apply 类似,区别在于使用上
bind 的执行的结果返回的是绑定了一个对象的新函数.var obj = {name: '饥人谷'} function sayName(){ console.log(this.name) } var fn = sayName.bind(obj) // 注意 这里 fn 还是一个函数, //功能和 sayName 一模一样,区别只在于它里面的 this 是 obj fn() // 输出: '饥人谷'