# 1.区别
# 1.1 共同点:都是用来改变 this 的指向
# 1.2call 和 apply 区别
# 1.2.1 相同点:都是调用对象的一个方法,用另一个对象替换当前对象
例如:B.call(A, args1,args2);即 A 对象调用 B 对象的方法
F.apply(G, arguments);即 G 对象应用 F 对象的方法
# 1.2.2 不同点:call()方法的作用和 apply() 方法类似,区别就是call()
方法接受的是参数列表,而apply()
方法接受的是一个参数数组。
call()的第一个参数是 this 要指向的对象,后面传入的是参数列表,参数可以是任意类型,当第一个参数为 null、undefined 的时候,默认指向 window;
apply():第一个参数是 this 要指向的对象,第二个参数是数组
例如:
var obj = {} //定义一个空的对象
function f(x, y) {
console.log(x, y)
console.log(this) //this是指obj
}
f.apply(obj, [1, 2]) //后面的值需要用[]括起来
f.call(obj, 1, 2) //直接写
1
2
3
4
5
6
7
2
3
4
5
6
7
# 1.3call()和 bind()的区别
# 1.3.1 相同点:都是用来改变 this 的指向
# 1.3.2 不同点:call()改过 this 的指向后,会再执行函数,bind()改过 this 后,不执行函数,会返回一个绑定新 this 的函数
例如:
function f(){
console.log("看我怎么被调用");
console.log(this) //指向this
}
var obj = {};
f.call(obj) //直接调用函数
var g = f.bind(obj); //bind()不能调用函数
g(); //此时才调用函数
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
未完待续...