博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
call和apply
阅读量:7199 次
发布时间:2019-06-29

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

本文根据知乎中一些大佬的回复整理完成,如有更深见解,欢迎加入讨论~~

在js OOP中,经常会这样定义:

function cat(){}cat.prototype = {    food: 'fish',    say: function(){        console.log('I love ' + this.food);    }        }var blackCat = new cat;blackCat.say(); //I love fish

使用call和apply是为了动态改变this而出现的,当一个对象没有某个方法,但是其他方法有,可以借助call或apply来使用其他对象的方法来操作:

function cat(){}cat.prototype = {    food: 'fish',    say: function(){        console.log('I love ' + this.food);    }        }var blackCat = new cat;blackCat.say(); //I love fishvar whiteDog = {food: 'bone'};blackCat.say.call(whiteDog); //I love bone

call 和 apply 的区别是,call 需要把参数按顺序传递进去,而 apply 是把参数放在数组中传递。

因此,js 中某个函数的参数数量是不固定的,可以使用 apply,将参数 push 进数组进行传递,也可以使用 arguments 对象来进行遍历获取所有参数;在参数明确知道,数目确定的时候可以使用 call.

举个例子:

通过document.getElementsByTagName 选择的 dom 节点是一种类似于array的对象,但是它不能应用Array 下的 push , pop等方法,我们可以通过:

var domNodes = Array.prototype.slice.call(document.getElementsByTagName('*'));

这样domNodes 就可以使用Array 下所有的方法了。

转载于:https://www.cnblogs.com/leraine/p/7606288.html

你可能感兴趣的文章
在html页头设置不缓存
查看>>
UE正则表达式模糊替换
查看>>
SQL 中的常用函数及使用
查看>>
《转载》解决Eclipse和myeclipse在进行 html,jsp等 页面编辑时,自动格式化变丑的问题...
查看>>
【转】javascript深入理解js闭包
查看>>
Action获取请求参数的三种方式的第二种
查看>>
PCB设计基本流程
查看>>
Git常用命令
查看>>
错题1:(关于补码反码)
查看>>
Netty版本升级血泪史之线程篇
查看>>
Spring(一)Spring中的IOC和DI
查看>>
jzoj5980. 【WC2019模拟12.27】字符串游戏
查看>>
POJ1273(最大流Isap)
查看>>
Dubbo面试问题
查看>>
Fragment的setUserVisibleHint方法实现懒加载
查看>>
@Controller和@RestController的区别?
查看>>
Mysql锁机制--并发事务带来的更新丢失问题
查看>>
java 8种基本数据类型
查看>>
ES6 学习 -- 字符串模板
查看>>
Oracle HR 样例数据库用户的建立
查看>>