解析js中的call、apply、bind
来源:互联网 发布:网络拓扑生成器 编辑:程序博客网 时间:2024/06/06 01:22
解析js中的call、apply、bind
- 解析js中的callapplybind
- call和apply
- 改变上下文
- 调用原生对象的方法
- 实现继承
- bind
- call和apply
call和apply
1. 改变上下文
obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]);
call
和apply
作用相同,都是把obj
(即this)绑定到thisObj
,这时候thisObj
具备了obj
的属性和方法。或者说thisObj
继承了obj
的属性和方法,绑定后会立即执行函数。唯一区别是apply
接受的是数组参数,call
接受的是连续参数。
function add(j, k){ return j+k;}function sub(j, k){ return j-k;}add(5,3); //8add.call(sub, 5, 3); //8 sub具有了add的属性和方法add.apply(sub, [5, 3]); //8 sub具有了add的属性和方法sub(5, 3); //2sub.call(add, 5, 3); //2 add具有了sub的属性和方法sub.apply(add, [5, 3]); //2 add具有了sub的属性和方法
2. 调用原生对象的方法
var a = {0:1, 1:"csxiaoyao", length: 2}; // a.slice(); // is not a functionconsole.log(Array.prototype.slice.call(a));//[1, "csxiaoyao"]
对象a类似array,但不具备array的slice等方法。使用call绑定,这时候就可以调用slice方法。
3. 实现继承
通过call和apply,可以实现对象继承
var Parent = function(){ this.name = "csxiaoyao"; this.age = 25;}var child = {};console.log(child);//Object {} ,空对象Parent.call(child);//对象继承,子对象具有了父对象的属性和方法console.log(child);//Object {name: "csxiaoyao", age: 25}
bind
obj.bind(thisObj, arg1, arg2, ...);
把obj绑定到thisObj,这时候thisObj具备了obj的属性和方法。与call和apply不同的是,bind绑定后不会立即执行。
function add(j, k){ return j+k;}function sub(j, k){ return j-k;}console.log(add.bind(sub, 5, 3)); //function add(j, k){return j+k;}console.log(add.bind(sub, 5, 3)()); //8
如果bind的第一个参数是null或undefined,等于将this绑定到全局对象。
0 0
- 解析js中的call、apply、bind
- js中的apply/call/caller/callee/bind
- JS中的call、apply、bind方法
- JS中的call、apply、bind方法
- JS中的call、apply、bind方法
- apply, call, bind在js中的区别
- JS中的call、apply、bind方法详解
- 理解JS中的call、apply、bind方法
- JS中的call、apply、bind方法
- JS中的call、apply、bind方法
- 理解JS中的call、apply、bind方法
- 理解JS中的call、apply、bind方法
- 浅谈JS中的call、apply和bind
- 理解JS中的call、apply、bind方法
- 深入理解js中的apply、call、bind
- bind、apply、call解析
- JS call bind apply
- 浅谈js中的call,apply,bind方法中的this指针
- Servlet生命周期
- JavaScript中Array.sort()的底层实现及应用
- 枚举
- 使用rails生成excel(CSV)表格
- ECMAScript数据类型关系总结
- 解析js中的call、apply、bind
- 欢迎使用CSDN-markdown编辑器
- JavaScript实现两个小球碰撞简单模型【未完】
- HashMap,LinkedHashMap,TreeMap对比
- JavaScript 面向对象(封装、继承、多态)多种方式实现完全总结
- set命令
- HDU 2015 偶数求和
- 从setTimeout分析浏览器线程
- windows下匿名管道