call(), apply(), bind()三个晦涩函数
来源:互联网 发布:java怎么求质数 编辑:程序博客网 时间:2024/05/22 09:45
1.call()函数和apply()函数
JS中每个函数都有call()和apply()两个方法,可以用他们来触发函数。并指定相关的调用参数。
此外,这两个方法还有另外一个功能,它可以让一个对象去“借用”另一个对象的方法,并为己用。这也是一种非常简单而实用的代码重用。
例如,下面我们定义一个some_obj对象,该对象中有一个say()方法:
var some_obj ={
name :’Ninja’,
say : function(who){
return ‘Haya’ + who + ‘, I am a ’ + this.name;
}
};
这样一来,我们就可以调用该对象的say()方法,并在其中使用this.name来访问其name属性了:
some_obj.say(‘Dude’);
“Haya Dude,I am a Ninja”
下面,我们再创建一个my_obj对象,它只有一个name属性:
var my_obj = {name: ‘Scripting guru’};
显然,some_obj的say()方法也适用于my_obj,因此我们希望将该方法当做my_obj自身的方法来调用。在这种情况下,我们就可以试试say()函数中的对象方法call:
some_obj.say.call(my_obj,’Dude’);
“Haya Dude,I am a Scripting guru”
成功了。这是为什么呢?由于我们在调用say()函数的对象方法call()是传递了两个参数:对象my_obj和字符串“Dude”。这样一来,当say()被调用时,其中的this就被自动设置成了my_obj对象的引用。因而我们看到,this.name返回的不在是“Ninja”,而是“Scripting guru”了【实际上就是通过call的首参数修改了对象函数的this值】。
如果我们调用call方法时需要传递更多的参数,可以在后面一次加入它们:
some_obj.someMethod.call(my_obj,’a’,’b’,’c’);
另外,如果我们没有将对象传递给call()的首函数,或者传递给它的是null,它的调用对象将会被默认为全局对象。
apply()的工作方式与call基本相同,唯一的不同之处在于参数传递形式,这里目标函数所需要的参数都是通过一个数组来传递。所以,下面两行代码的作用是等效的:
some_obj.someMethod.apply(my_obj,[‘a’,’b’,’c’]);
some_obj.someMethod.call(my_obj,’a’,’b’,’c’);
因而,对于之前的示例,我们也可以这样写:
some_obj.say.apply(my_obj,[‘Dude’]);
“Haya Dude,I am a Scripting guru”
2.bind()函数
bind()
- call(), apply(), bind()三个晦涩函数
- Javascript中call,apply,bind三个函数的用法
- Javascript中关于call,apply,bind这三个函数的用法
- javascript 的bind/apply/call函数
- Javascript中bind、call、apply函数用法
- Javascript中bind、call、apply函数用法
- JavaScript之call() 、apply() 、bind()函数
- 关于call(),apply(),bind()函数的理解
- js中call、apply、bind函数
- Javascript中的this,call,apply,bind函数
- JavaScript之call(),apply(),bind()三个方法理解
- call apply 与 bind
- call()、apply()、bind()
- apply bind call区别
- call,apply,bind
- 【JavaScript】call, apply, bind
- bind apply call异同
- apply call bind区别
- Handler2
- 博客初衷
- Android -- 无线网络配置信息的管理者WifiConfigStore简介
- 通用CentOS 6 服务器安全配置指南
- LeetCode23 – Merge k Sorted Lists (Java)
- call(), apply(), bind()三个晦涩函数
- java旅行--第五站--servlet与JSP--java过滤器与session的小例子
- CSS基础之CSS选择器
- CSS中易迅网三角形的制作
- 域名
- linux ssh/sftp
- 类类型的大小
- Poedu_计算机基础_lesson04_20160830_磁盘
- Android设计模式之单例模式