Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2773|回复: 1
打印 上一主题 下一主题

改变作用域的方法 apply call

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2015-9-17 12:36:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hechengjin 于 2015-10-20 09:29 编辑

apply
通过传入对象参数改变原函数作用域为参数作用域。
fun.apply(obj, [a,b,c]);
调用fun函数,作用域为obj,参数为a/b/c。
call
同上,不过为不定参数。
new
通过实例化,将构造函数this指针指向实例函数。


bind的作用和apply,call类似都是改变函数的execute context,也就是runtime时this关键字的指向。但是使用方法略有不同。一个函数进行bind后可稍后执行。



http://yalishizhude.github.io/2015/09/16/pieces/?utm_source=tuicool
回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
发表于 2017-11-27 16:14:34 | 只看该作者
call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。用的比较多的,通过document.getElementsByTagName选择的dom 节点是一种类似array的array。它不能应用Array下的push,pop等方法。我们可以通过:var domNodes =  Array.prototype.slice.call(document.getElementsByTagName("*"));这样domNodes就可以应用Array下的所有方法了。

// 将 arguments 对象转为数组
  var args = [].slice.call(arguments);         以arguments对象调用数组的方法slice


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 08:00 , Processed in 0.057549 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表