js中call、apply和bind
来源:互联网 发布:固结快剪试验数据 编辑:程序博客网 时间:2024/05/21 07:48
call和apply
obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]);
两者作用一致,都是把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); //8add.apply(sub, [5, 3]); //8sub(5, 3); //2sub.call(add, 5, 3); //2sub.apply(add, [5, 3]); //2
调用原生对象的方法
示例:
var a = {0:1, 1:"yjc", length: 2}; a.slice(); //TypeError: a.slice is not a functionArray.prototype.slice.call(a);//[1, "yjc"]
对象a类似array,但不具备array的slice等方法。使用call绑定,这时候就可以调用slice方法。
实现继承
通过call和apply,我们可以实现对象继承。示例:
var Parent = function(){ this.name = "yjc"; this.age = 22;}var child = {};console.log(child);//Object {} ,空对象Parent.call(child);console.log(child); //Object {name: "yjc", age: 22}
以上实现了对象的继承。
bind的使用
obj.bind(thisObj, arg1, arg2, ...);
把obj绑定到thisObj,这时候thisObj具备了obj的属性和方法。与call和apply不同的是,bind绑定后不会立即执行。
同样是add()和sub():
add.bind(sub, 5, 3); //不再返回8add.bind(sub, 5, 3)(); //8
如果bind的第一个参数是null或者undefined,等于将this绑定到全局对象。
转载地址:http://www.cnblogs.com/52fhy/p/5118877.html
阅读全文
0 0
- js中call、apply和bind
- 对js中call、apply和bind的理解
- js中apply、call和bind的区别
- js中bind、call、apply区别和简单应用
- js中bind、call和apply的区别
- JS call bind apply
- !!js中call、apply、bind的用法
- js中call、apply、bind的用法
- JS中call、apply、bind使用指南
- JS中apply call bind的区别
- JS中call、apply、bind大概区别
- JS 中 call、apply、bind 那些事
- js中bind、call、apply方法详解
- 详解js中call apply bind
- JS 中 call、apply、bind 那些事
- js中call、apply、bind函数
- js中call、apply、bind方法
- JS中call、apply、bind的区别
- springboot学习笔记
- 如果你会oracle+mysql+java+hadoop
- Tensorflow相关概念
- Android自定义view——组合控件
- Vysor1.8.2 mac破解方法
- js中call、apply和bind
- 基于Swift的iOS应用程序开发:通过UITextFieldDelegate快速理解Delegate事件代理
- 第一天AsyncTask和HttpClient
- python 把爬取页面的所有地址和访问结果存入数据库
- 《Java设计模式之组合模式》
- 对象序列化与反序列化
- 电脑连不上网了!!(一)
- 设计模式-状态模式
- 定时器 Timer