Javascript核心语法与技巧汇总(四):改变this的默认指向(apply 、call、bind)

[复制链接]
查看: 727|回复: 0

585

主题

1179

帖子

6291

积分

管理员

人亦已歌

Rank: 12Rank: 12Rank: 12

积分
6291

活跃会员热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

发表于 2022-10-4 09:45:56 | 显示全部楼层 |阅读模式
一、apply
语法:
  1. fn.apply(obj,[40,10]);//将fn应用到obj,并传入数组参数[40,10]执行fn。
复制代码

例程:
  1. var person = {

  2.         fullName: function (city, country) {

  3.                 return this.firstName + " " + this.lastName + "," + city + "," + country;

  4.         }

  5. }

  6. var person1 = {

  7.         firstName: "Bill",

  8.         lastName: "Gates"

  9. }

  10. //调用fullName方法,并将该方法应用到person1

  11. console.log(person.fullName.apply(person1, ["Oslo", "Norway"]));//使用数组传参,返回Bill Gates,Oslo,Norway
复制代码

二、call  
语法
  1. fn.call(obj,40,10);//与apply不同的是,call不支持数组传参
复制代码

例程
  1. var person = {

  2.         fullName: function (city, country) {

  3.                 return this.firstName + " " + this.lastName + "," + city + "," + country;

  4.         }

  5. }

  6. var person1 = {

  7.         firstName: "Bill",

  8.         lastName: "Gates"

  9. }

  10. console.log(person.fullName.call(person1, "Oslo", "Norway"));//使用独立传参,返回Bill Gates,Oslo,Norway
复制代码

三、bind
语法
  1. 改变this指向后返回新函数,如果要调用,需加()。

  2. fn.bind(obj,40,10)();或 fn.bind(obj)(40,10);
复制代码
例程
  1. var person = {

  2.         fullName: function (city, country) {

  3.                 return this.firstName + " " + this.lastName + "," + city + "," + country;

  4.         }

  5. }

  6. var person1 = {

  7.         firstName: "Bill",

  8.         lastName: "Gates"

  9. }

  10. console.log(person.fullName.bind(person1,"Oslo", "Norway")());//Bill Gates,Oslo,Norway

  11. console.log(person.fullName.bind(person1)("Oslo", "Norway"));//Bill Gates,Oslo,Norway
复制代码

巧用
将Math应用到null,并传入数组arr,这样可以调用Math中的方法求出数组的最大值。其它对象同理。
  1. var arr=[1,2,3,4,5,6];

  2. console.log(Math.max.apply(null,arr));//输出6
复制代码


懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

精彩图文
 
 
在线客服
技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫

QQ|小黑屋|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表