javascript中的call、apply和bind的用法
2018-03-01 11:38
686 查看
call和apply
call、apply和bind都可以改变this的指向,call和apply绑定对象之后会立即执行,而bind绑定的方法需要调用才能执行。obj.call(thisObj, arg1, arg2, ...); obj.call(thisObj, [arg1, arg2, ...]);
两者的作用一致,都是把
obj(即this)绑定到
thisObj,这个时候
thisObj具备了
obj的属性和方法,也可以说
thisObj继承了
obj的属性和方法。绑定后会立即执行函数。
区别:apply接受的是类数组参数,call接受的是连续参数。
示例:
function add(a, b){ return a + b; } function sub(a, b){ return a - b; }
在控制台中运行如下:
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
调用原生对象的方法:
let a = {0:1, 1:"yjc", length: 2}; a.slice(); //TypeError: a.slice is not a function Array.prototype.slice.call(a);//[1, "yjc"]
对象a类似Array,但是不具备array的slice等方法。使用call绑定就可以调用slice方法。
call和apply实现继承
通过call和apply,我们可以实现继承。
let Parent = function(){ this.name = 'Lenhart'; this.age = 25; } let child = {}; console.log(child); //Object {} Parent.call(child); console.log(child);
child继承了Parent的属性。
bind的使用
obj.bind(thisObj, arg1, arg2,...);
把obj绑定到了thisObj上,此时thisObj具备了obj的属性和方法。与call和apply不同的是,bind绑定后需要调用才能执行。
add.bind(sub, 5, 3); //仅仅绑定没有调用 add.bind(sub, 5, 3)(); //8
如果bind的第一个参数是null或者undefined,等于将this绑定到全局对象。
相关文章推荐
- javascript中call()、apply()、bind()的用法
- 开启Javascript中apply、call、bind的用法之旅模式
- JavaScript中call、apply、bind函数的用法
- javascript中call,apply,bind的用法对比分析
- Javascript中call,apply,bind三个函数的用法
- javascript中call,apply,bind函数用法示例
- 开启Javascript中apply、call、bind的用法之旅模式
- javascript中call,apply,bind的用法对比分析
- javascript this 和 es6 箭头函数this 的理解以及call()、apply()、bind()的用法
- javascript中的call(),apply()以及bind()的用法
- JavaScript学习笔记apply、call、bind用法说明
- JavaScript:call,apply,bind的用法
- 浅谈javascript中call()、apply()、bind()的用法
- 浅谈javascript中call()、apply()、bind()的用法(转载)
- 浅谈javascript的call()、apply()、bind()的用法
- JavaScript必知必会(十) call apply bind的用法说明
- javascript中this、apply、call、bind的用法和区别
- javascript中call,apply,bind的用法对比分析
- Javascript中关于call,apply,bind这三个函数的用法
- JavaScript中apply、call、bind的区别与用法