js中bind、call、apply区别和简单应用

原创 2017年01月03日 12:45:05

1,js函数应用的时候都包含着隐式传递this的效果--而bind、call、apply是显式传递boj的效果;

2,显式是为了和别的obj(上下文)发生关系,bind是指定关系,然后再某个时刻运用这种关系,call、apply是指定这种关系并且立即运用;

以下是例子:

var simpleForm1 = {name:"yangzai",age:10,submit:function(){alert("name:"+this.name+",age:"+this.age);}};
document.getElementById("simpleForm1").onclick = simpleForm1.submit;//1-name:,age:undefined
document.getElementById("simpleForm1").onclick = function(){//2-name:yangzai,age:10
	simpleForm1.submit();
};
document.getElementById("simpleForm1").onclick = simpleForm1.submit.bind(simpleForm1);//3-name:yangzai,age:10
第一种:submit的引用指向已经便更,所以this.name不会再调用simpleForm1里面的属性;

第二种:建立匿名函数是一种方法,也很常用;

第三种:用bind改变引用关系,使this作用域回到simpleForm1对象中;

下面是call、apply的调用例子:

//call、apply调用时,可以显式改变js作用域--call、apply其实也是函数调用的一种方式,下面我们指定了作用域为simpleForm2
var simpleForm1 = {name:"yangzai",age:10,submit:function(){alert("name:"+this.name+",age:"+this.age);}};
var simpleForm2 = {name:"datou",age:20};
document.getElementById("simpleForm1").onclick = simpleForm1.submit.call(simpleForm2);//name:datou,age:20
document.getElementById("simpleForm1").onclick = simpleForm1.submit.apply(simpleForm2);//name:datou,age:20


版权声明:本文为博主原创文章,未经博主允许不得转载。

JS中call、apply、bind大概区别

为什么需要这些?主要是因为this,来看看this干的好事。box.onclick = function(){   function fn(){     alert(this);   }   fn()...
  • lizeshi125
  • lizeshi125
  • 2016年12月15日 14:53
  • 2515

apply, call, bind在js中的区别

apply, call, bind在js中的区别在js中,这三种方法都是用来改变函数的this对象的指向的。先看看相似点: 都是用来改变函数的this对象的指向的 第一个参数都是this要指向的对...
  • xiaobing_hope
  • xiaobing_hope
  • 2016年07月20日 21:35
  • 1328

js中call,apply和bind方法的区别和使用场景

详解js中的call,apply和bind函数
  • yaojxing
  • yaojxing
  • 2017年05月14日 12:09
  • 1489

JavaScript中bind、call、apply函数用法详解

在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手。前几天有人问我关于代码里 call() 函数的用法,我让他去看书,这里推荐用js 写服务...
  • chenleixing
  • chenleixing
  • 2015年03月14日 14:14
  • 6177

apply、call、bind区别、用法

apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向); 如果使用apply或call方法,那么this指向他们的第一个参数,apply的第二个...
  • A_dangdang
  • A_dangdang
  • 2016年03月26日 12:08
  • 9265

详解call(),apply()和bind()

之前看了点es6的箭头函数,为了搞懂箭头函数的this,看了很多文章,也顺便看了几个绑定函数,发现很多以前没注意的问题,收获不少。   之前就在网上的笔试题中看过用js实现bind()函数,没怎么在意...
  • u014267183
  • u014267183
  • 2016年09月21日 17:32
  • 6338

js的call() ,apply() 两种方法的区别和用法,最白话文的解释,让枯燥滚粗!

背景:今天群里有 妹子(我就不指名道姓喽)说:百度了一圈calll()函数和apply()函数,感觉还是糊里糊涂然后群里热闹了,各种表情包,各种殷勤,你懂的!正好我前几天刚又重新翻了一遍 那本 600...
  • xllily_11
  • xllily_11
  • 2016年05月23日 13:17
  • 6750

JS中的call、apply、bind方法详解

一、call()和apply()方法 1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调...
  • hj7jay
  • hj7jay
  • 2016年12月13日 14:31
  • 1160

Js中apply与call的区别与用法

解析:apply与call是更改对象的内部指针,即改变对象的this指向的内容。 call与apply的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。...
  • wangji5850
  • wangji5850
  • 2016年03月17日 12:00
  • 1503

javascript的apply()、call()、bind()和jquery的$.proxy()

太多资料可以搜,不重复太多内容了。 都是用于处理上下文的。 随意粘贴个参考文章 http://www.cnblogs.com/cosiray/p/4512969.html#undefin...
  • festone000
  • festone000
  • 2016年10月18日 09:57
  • 770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:js中bind、call、apply区别和简单应用
举报原因:
原因补充:

(最多只允许输入30个字)