obj.call(thisObj, arg1,arg2...)
obj.apply(thisObj, [arg1,arg2,arg3...])
obj.bind(thisObj, arg1,arg2...)
- call 和 apply 都可以用于改变 this 指向,即将obj绑定到thisObj上,这时 thisObj 就具有了 obj 的属性和方法。
- 他们的区别在于第二个参数,call 接受的是连续参数,apply 接受的是 数组参数;
function add(j, k){
return j+k;
}
function sub(j, k){
return j-k;
}
在控制台运行:
add(5,3); //8
add.call(sub, 5, 3); //8
add.apply(sub, [5, 3]); //8
sub(5, 3); //2
sub.call(add, 5, 3); //2
sub.apply(add, [5, 3]); //2
- this 绑定后会立即执行
bind 与 call、apply 的区别 - bind 与 call 相同,接受的也是连续参数
- bind 绑定后不会立即执行
- bind 的第一个参数如果是 null 或者 undefined ,则会绑定到全局对象
同样是add()和sub():
add.bind(sub, 5, 3); //不再返回8 add.bind(sub, 5, 3)(); //8
使用call调用原生方法
var a = {0:1, 1:"zohar", length: 2};
a.slice(); //TypeError: a.slice is not a function
Array.prototype.slice.call(a);//[1, "zohar"]
使用call实现继承
var parent = function () {
this.url= 'zohar.com.cn',
this.name= 'zohar'
}
var child = {}
console.log(child); // {}
parent.call(child);
console.log(child); // {url: "zohar.com.cn", name: "zohar"}
原作者:飞鸿影~
出处:http://52fhy.cnblogs.com/