前端:js中修改this的指向方法整理
该方法传递一个thisArgs和一个参数列表,thisArgs指定了函数在运行中的调用者,也就是函数中的this对象,而参数列表会被传入调用函数中。
(3)传递字符串,数值或者不二类型的那个基础数据类型,函数中的this指向其对应的包装对象,如string,number,boolean(4)传递一个对象,函数中的this指向这个对象。
这是call的核心功能,它允许你在一个对象上调用该对象没有定义的方法,并且这个方法可以访问该对象中的属性
在下例中的for循环体内,我们创建了一个匿名函数,然后通过调用该函数的call方法,将每个数组元素作为指定的this值执行了那个匿名函数。这个匿名函数的主要目的是给每个数组元素对象添加一个print方法,这个print方法可以打印出各元素在数组中的正确索引号。
当然,这里不是必须得让数组元素作为this值传入那个匿名函数(普通参数就可以),目的是为了演示call的用法。
apply和call的唯一区别是第二个参数的传递方式不同,apply的第二个参数必须是一个数组,而call允许传递一个参数列表。值得你注意的是,虽然apply接受的是一个参数数组,但在传递给调用函数时,却是以参数列表的形式传递。
注意:这里的argsArray可以是一个数组或者类数组对象,如果该参数的值为null 或 undefined,则表示不需要传入任何参数。
当参数是明确知道数量时用call;不确定的时候用apply,然后把参数push进数组传递进去,也可以通过arguments这个数组来遍历所有的参数。
bind是ES5新增的一个方法,它的传参和call类似,但又和call/apply有着显著的不同,即调用call或apply都会自动执行对应的函数,而bind不会执行对应的函数,只是返回了对函数的引用。
ES5中新增加的bind方法可以弥补call()和apply()方法的不足,由于call/apply会对目标函数自动执行,从而导致它无法在事件绑定函数中使用,因为事件绑定函数不需要我们手动执行,它是在事件被触发时由JS内部自动执行的。
而bind在实现改变函数this的同时又不会自动执行目标函数,因此可以完美地解决上述问题,我们来看看一个例子:
- 标签:本站
- 编辑:唐志钢
- 相关文章
-
前端:js中修改this的指向方法整理
该方法传递一个thisArgs和一个参数列表,thisArgs指定了函数在运行中的调用者,也就是函数中的this对象,而参数列表会被传入调用函…
-
毕业季的人生方向在哪职坐标助力高薪就业
又是一年春天,还是那些故事,2000年出生的“千禧宝宝”们已经22岁了,他们中的一部分人已经走上了职场,另一部分也进入了大四实习期…
- 西安航天基地多措并举营造全运“氛围感”
- 战略性购买方式站到了药品定价的前端--健康·生活--人民网
- web前端 - JavaScript 中删除过滤数组的方法总结
- 涉6亿条个人信息90后建空壳公司获利百万元
- 《中国社会科学》2021年第9期目录