Javascript中call、apply、bind函数
javascript在函数创建的时候除了自己定义的参数外还会自动新增this和arguments两个参数
javascript中函数也是对象,call、apply、bind函数就是函数中的三个函数,这三个函数的作用就是改变调用当前函数中this指向。
call、apply、bind三个函数接收两个参数,第一个参数都是函数执行指向对象的this,第二参数是函数执行传递的参数数据,call和bind传递数据是变长参数,apply传递数据是数组。call和apply是立即执行的,而bind是返回一个函数,返回函数执行时才执行
有点绕,看例子
1、对象中函数
var obj={
x:0,
func:function(par1,par2){
this.x=par1+par2;
}
}
obj.x;//0
obj.func(1,2);
obj.x;//3
改变obj.func函数中this指向window
call方式:obj.func.call(window,3,3);或obj.func.call(null,3,3);//第一个参数为null也是指向window
window.x;//6
apply方式:obj.func.apply(window,[3,4]);或obj.func.apply(null,[3,4]);
window.x;//7
bind方式:var f=obj.func.bind(window,5,5);或var f=obj.func.bind(null,5,5);
f();window.x;//10
改变obj.func函数中this指向新对象var o={};
调用方式和上面一样,只是把window或null换成o,调用o.x
2、普通函数
var f=function或function f都一样,用function f方式举例
function f(x,y){
this.result=x+y;
}
f(1,2);
result;//3,此时this指向window,window.result也是3
改变f指向新对象
var o={};
f.call(o,2,3);
o.result;//5,此时并没有改变window.result值,window.result值仍然为3
f.apply和f.bind与对象中函数调用一样,不赘述
此处要说明的是如果用构造函数创建对象,则函数中的this指向构造函数返回的新对象
var ff=new f(6,6);
ff.result;//12
var fff=new f(7,7);
fff.result;//14
Javascript中call、apply、bind函数的更多相关文章
- javascript中call,apply,bind的用法对比分析
这篇文章主要给大家对比分析了javascript中call,apply,bind三个函数的用法,非常的详细,这里推荐给小伙伴们. 关于call,apply,bind这三个函数的用法,是学习java ...
- JavaScript中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的环境,在没有学之 ...
- 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的使用
不同点: 1.call():传参方式跟bind一样(都是以逗号隔开的传参方式),但是跟apply(以数组的形式传参)不一样, 2.bind(): 此方法应用后的情形跟call和apply不一样.该方法 ...
- JavaScript中的apply和call函数详解(转)
每个JavaScript函数都会有很多附属的(attached)方法,包括toString().call()以及apply().听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,J ...
- JavaScript中的apply和call函数详解
本文是翻译Function.apply and Function.call in JavaScript,希望对大家有所帮助 转自“http://www.jb51.net/article/52416.h ...
- [转]Javascript中的自执行函数表达式
[转]Javascript中的自执行函数表达式 本文转载自:http://www.ghugo.com/javascript-auto-run-function/ 以下是正文: Posted on 20 ...
- 深入理解javascript中的立即执行函数(function(){…})()
投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...
随机推荐
- linux基础-第六单元 用户、群组和权限
用户及passwd文件 /etc/passwd文件的功能 /etc/passwd文件每个字段的具体含义 shadow文件 /etc/shadow文件的功能 /etc/shadow文件每个字段的具体含义 ...
- ASP.NET利用WINRar实现在线解压缩文件
一.肯定是服务器必须装了winrar这个软件了. 二.创建Helper类,如下: using System; using System.Collections.Generic; using Syste ...
- SpringMVC学习--参数绑定
spring参数绑定过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接收 ...
- android 之 surfaceView和普通View的重绘使用
!自定义控件式需要实现AttrbuteSet 可在xml文件中配置略过创建该对象 普通的View只能在主线程中绘制界面,适用于简单的被动绘制 SurfaceView则可以在新线程中绘制界面,不会阻 ...
- [转]Java日期时间使用总结
原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...
- Django- 1- 数据库设置
更改配置文件中的 字段更改为 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', //按照自己的数据库配置配置,现在所配置 ...
- 【BZOJ 1178】【APIO 2009】CONVENTION会议中心
http://www.lydsy.com/JudgeOnline/problem.php?id=1178 这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不 ...
- 【BZOJ 2118】墨墨的等式
http://www.lydsy.com/JudgeOnline/problem.php?id=2118 最短路就是为了找到最小的$x$满足$x=k×a_{min}+d,0≤d<a_{min}$ ...
- R语言之RCurl实现文件批量下载
前言: RCurl工具包的作者是由Duncan Temple Lang现任加州大学 U.C. Davis分校副教授.他曾致力于借助统计整合进行信息技术的探索.使用者通过RCurl可以轻易访问网页,进行 ...
- Trinity min_kmer_cov
A high min_kmer value was used to reduce noise in the assembly and to identify only transcripts that ...