如何理解和熟练运用js中的call及apply?
来源:互联网 发布:阿里云软件下载 编辑:程序博客网 时间:2024/06/05 21:54
转载:http://www.cnblogs.com/52fhy/p/5118877.html
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绑定到全局对象。
阅读全文
0 0
- 如何理解和熟练运用js中的call及apply?
- 如何理解和熟练运用js中的call及apply?
- 如何理解和熟练运用js中的call及apply
- 如何理解和熟练运用js中的call及apply
- 如何理解和熟练运用js中的call及apply?
- 如何理解和熟练运用js中的call及apply?
- 如何理解和熟练运用js中的call及apply?
- 理解和熟练运用js中的call及apply
- 如何理解js中的call及apply
- 如何理解JS中的call及apply
- 如何理解js中的call和apply
- js中的call及apply
- js中的call及apply
- JS中的call和apply
- js中的call和apply
- JS中的Call和Apply
- js 中的apply和call
- Js中的call和apply
- difacto中的loss.h
- 面试题50:树中两个节点的最低公共祖先
- 由chmod改系统文件权限引ssh登录报ssh_exchange_identification: read: Connection reset by peer无法登陆问题
- properties文件的写入和读取
- Solr can't create core in docker command
- 如何理解和熟练运用js中的call及apply?
- 分布式框架简介SSM组合+ springmvc+mybatis+shiro+restful+bootstrap
- 关于树莓派的连接
- POJ
- 494. Target Sum
- Delphi中JSon SuperObject 使用:数据集与JSON对象互转
- caffe convnet quick guide
- RocketMQ原理解析-producer 2.如何发送消息
- C# 不同命名空间的相同类,反射赋值