博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何理解和熟练运用js中的call及apply?
阅读量:4072 次
发布时间:2019-05-25

本文共 1134 字,大约阅读时间需要 3 分钟。

转载: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绑定到全局对象。

你可能感兴趣的文章
UIImage存为本地文件与UIImage转换为NSData
查看>>
通知的使用
查看>>
PVID和VID的理解
查看>>
FXS(le88266)工作原理介绍
查看>>
MII接口介绍
查看>>
GSM短信收发介绍
查看>>
linux之dup和dup2函数解析
查看>>
boa 流程分析
查看>>
socket编程简介
查看>>
Linux Netlink基本使用
查看>>
ModBus协议简介及移植到STM32单片机
查看>>
Apollo分布式部署Docker化和使用
查看>>
解决Python下使用pip安装Builtwith模块字符解析错误
查看>>
Window环境下安装基于Python的Scrapy网络爬虫框架
查看>>
[Note]matlab中调用java类或运行java
查看>>
启动Nginx报[10013]错误的解决方案
查看>>
SpringBoot爬坑记之Whitelabel Error Page
查看>>
Spring Boot入门学习笔记(一)
查看>>
Eclipse中使用cmd,解决乱码。
查看>>
Linux shell的一些小结
查看>>