call,apply,bind的用法和细节差异
call,apply,bind的用法
call,apply和bind都用来改变js中this对象的指向
var dog = {
name:'dog',
speak: function(value){
alert("i'm" + name + ", i can " + value);
}
} var cat = {
name:'cat'
}
1.call
此时cat中没有我们想用的speak方法,可以用call来‘借用’dog的方法。
dog.speak.call(cat,'meow');
// i'm cat, i can meow
2.apply
apply和call的用法类似,只是后面的传参是数组的格式。这个特性可以让apply在使用时直接传入一个数组对象,使得比call更方便一些
dog.speak.apply(cat,['喵喵喵']);
// i'm cat, i can 喵喵喵
3.bind
相比call和apply,bind的兼容性要差一些。不过最大的不同点是,bind返回的是一个函数,可以赋给一个对象,以便于之后调用,而不是直接执行函数。如果要直接生效需要再加一对括号才行。
var cat = {name:'cat'};var dog = {
name : 'dog',
speak : function(){
setTimeout(function(value){
alert("i'm " + this.name + ", i can " + value )
}.bind(cat,'meow'),1000)
}
} dog.speak();
// i'm cat, i can meow
可以注意到的一点是,bind可以直接使用在一个函数后面,比起前两位要把要用的对象再写一次要方便一些。
当bind不兼容时如何用call或apply封装一个bind?
function bind(fn,obj){
return function() {
return fn.apply(obj,arguments);
}
}
call,apply,bind的用法和细节差异的更多相关文章
- JavaScript中call,apply,bind方法的总结。
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...
- call,apply,bind方法的总结
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...
- JavaScript中call,apply,bind方法的总结
原文链接:http://www.cnblogs.com/pssp/p/5215621.html why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之 ...
- JS中call,apply,bind方法的总结
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user: "小马扎", fn: ...
- JavaScript中call,apply,bind方法的区别
call,apply,bind方法一般用来指定this的环境. var a = { user:"hahaha", fn:function(){ console.log(this.u ...
- JavaScript中call,apply,bind方法
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...
- 理解 JavaScript call()/apply()/bind()
理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,指向被调用函数的对象.当然 ...
- javascript & call & apply & bind & new
javascript & call & apply & bind & new Javascript call() & apply() vs bind()? ht ...
- call,apply,bind的用法
关于call,apply,bind这三个函数的用法,是学习javascript这门语言无法越过的知识点.下边我就来好好总结一下它们三者各自的用法,及常见的应用场景. 首先看call这个函数,可以理解成 ...
随机推荐
- idea旗舰版续命
首先鼓励大家使用正版!我一直用的是免费的社区版,但发现有一些功能被阉割了,比如weblogbic就不支持,无奈现在的项目要用到这个,只能去下载旗舰版. 旗舰版需要付费,作为程序员的我为了一个临时的项目 ...
- popen, pclose - process I/O
SYNOPSIS #include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FIL ...
- JavaScript版EAN码校验算法
<script type="text/javascript"> $(document).ready(function () { $("#btnCalc&q ...
- HDU-3810 超大容量01背包
题意:有n堆野兽,每堆野兽屠杀完完需要花费ti时间,可以增加金钱gi,敌法师有瞬移技能,可以从某堆野兽移到另一堆野兽,题目有给定从哪堆可以移到哪堆.最后问在满足打的金钱多余m的情况下的最少时间.数据范 ...
- uiautomatorviewer不能直接截取手机屏幕信息
本身可以用sdk——>tools里自带的ui automator viewer截取如果截取不了,采用以下方法: 新建一个文本文档,名字自己起如uni.bat(注意把后缀给改成.bat) adb ...
- Java实现代理服务器
Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务器即是Web服务器又是Web客户端. 代理服务器 ...
- 从Excel粘到Word的图片只有下面一半
把图片粘贴到WORD上为什么只显示最底下一部分? 出现此故障的原因,有可能是设置为固定值的文档行距小于图形的高度,从而导致插入的图形只显示出了一部分.所以要调整图片的段落格式中的行间距. 解决方法 选 ...
- MySQL server has gone away 问题解决方法
问题描述: SQLyog在执行大的sql文件时候,报错,报错日志显示2006 - MySQL server has gone away 解决办法: 在php.ini配置文件的[mysqld]节点下添加 ...
- js请求解析xml
xml数据 <?xml version="1.0" encoding="utf-8"?> <table> <node name=& ...
- Fractal
Fractal 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 This is the logo of PKUACM 2016. More specifically, th ...