菜单

彻底搞懂JavaScript中的apply和call方法_javascript技巧_脚本之家

2020年3月23日 - 澳门太阳娱乐手机登录

call和apply皆感觉了转移有些函数运转的context上下文而存在的,即为了转移函数体内部this的指向。因为JavaScript的函数存在定义上下文和平运动行时上下文以至上下文是足以订正的定义。

回到目录定义

fun.applyfun.call(thisArg, arg1,arg2, ...)

此中thisArg可认为null或undefined,那时候意味着全局对象,更详细见MDN:apply

多头的功效别无二致,只是选拔参数的主意不太一致。比方,有叁个函数定义如下:

var func1 = function{};

能够通过func1.call;恐怕func1.apply来调用。此中this是您想钦赐的上下文,它能够是不管三七三十九一个JavaScript对象,call要求把参数字传送递进去,而apply则把参数放在数组里。

因为在JavaScript中,有个别函数的参数数量是不牢固的,当你的参数字展现明精通数据时,用call,而不明确的时候用apply,然后把参数push进数组传递步向。当参数数量不确准时,函数内部也足以透过arguments那个数组来遍历全体的参数。

重回目录一个例子

在JavaScript OOP中,大家平日会那样定义:

funciton programmer() {}programmer.prototype = { hobby: 'programming', say.function() { alert('I love' + this.hobby); }}var xiaoMing = new programmer;

此刻一经大家有一个统筹妹子对象xiaoHua = {hobby:
‘designing’};我们不想对它再也定义say方法,那么大家能够透过call或apply使用xiaoMing的say方法:xiaoMing.say.call。

由此可看出,call和apply都以为着动态改变this而出现的,当八个object未有有个别方法或质量时,不过其余的靶子有,则能够依赖call或apply来选择任何对象的法子来操作。

obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]);

两个都是把obj绑定到thisObj,那时候thisObj具有了obj的属性和措施

个中相比较遍布的,通过document.getElementByTagName采纳的节点是一种类数组,它不能够应用Array下的push,pop等情势。但大家得以因而:

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

Array.prototype.slice.call能具有具有length属性的目的转为数组,那样domNodes就足以运用Array下的有所办法了。

以上那篇通透到底搞懂JavaScript中的apply和call方法就是我共享给大家的全体内容了,希望能给大家八个参谋,也意在我们多多点拨脚本之家。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图