bind()方法,是javascript原生的函数类的一个原型方法(即Function.prototype里的方法),不支持ie低版本.
基本格式:
function.bind(obj1,obj2,obj3...);
其中,function是一个方法属性,obj1是执行此方法的this上下文,obj2及之后的参数,是执行function时传入的参数。
bind方法有两个用处:
1.用来改变function方法中的上下文。
2.给function方法传入参数。
bind方法和apply方法,call方法的区别:
1.最大的区别是,bind方法是返回一个改变了上下文和参数的新方法,而不是执行了function
2.bind方法传入的参数(obj2及之后的参数),调用的时候会使用这两个参数,但是调用的时候还可以再接着传入新的参数,与bind时候的参数一起被传入并执行。
具体的用法:用法1: 无参数,仅仅改变方法的上下文:
<script type="text/javascript"> var Class = function(name,job){ this.name = name; this.job = job; }; var jyh = new Class('jyh','web-front-end'); var zxg = new Class('zxg','php'); //给jyh实例添加私有方法: jyh.intro = function(){console.log(this.name)}; //给jyh实例添加一个相同私有方法,但是使this上下文指向zxg实例: //注意,使用bind方法,是不执行方法的,只是改变方法里的上下文,返回一个新的方法; jyh.introOther = jyh.intro.bind(zxg); jyh.intro(); //指针指向自己 jyh.introOther(); //指针指向zxg </script>
用法2: 改变方法的上下文,并且带有参数:
<script type="text/javascript"> var Class = function(name){ this.name = name; }; var jyh = new Class('jyh'); var zxg = new Class('zxg'); //给jyh实例添加私有方法: jyh.intro = function(job){console.log(this.name+','+job)}; //给jyh实例添加一个相同私有方法,但是使this上下文指向zxg实例: //注意,使用bind方法,是不执行方法的,只是改变方法里的上下文,并且传入执行该方法时的参数 //注意,参数是在bind的同时定义的,而不是执行的时候定义的,详细参考bing-3.html jyh.introOther = jyh.intro.bind(zxg,'php'); jyh.intro('web-front-end'); //指针指向自己,传入参数 jyh.introOther(); </script>
用法3: 改变方法的上下文,并且传入的参数中带有this:
<script type="text/javascript"> var Class = function(name){ this.name = name; }; var jyh = new Class('jyh'); var zxg = new Class('zxg'); //给jyh实例添加私有方法: jyh.intro = function(job){console.log(job)}; //给jyh实例添加一个相同私有方法,但是使this上下文指向zxg实例: //注意,bind方法,第二个参数开始,this指向决定于bind的时候,而非调用的时候, //如果在这里使用bind,无论在何处执行jyh.introOther,得到的结果都是 zxg,[object Window] jyh.introOther = jyh.intro.bind(zxg,this); jyh.intro('web-front-end'); //指针指向自己,传入参数 var Klass = function(name){ this.name=name; this.init(); }; Klass.prototype.init=function(){ console.log(this); //如果在这里使用bind,this指向就是Klass的实例; //打开注释,this指向klass,关闭注释,根据第22行定义的,this指向window // jyh.introOther = jyh.intro.bind(zxg,this); //和在哪里调用没有关系 jyh.introOther(); }; //将Klass实例化时,调用jyh.introOther(),this指向就是klass; var klass = new Klass('klass'); </script>
用法4: 改变方法的上下文,有参数,并且执行的时候再添加新传入的参数:
<script type="text/javascript"> var Class = function(name){ this.name = name; }; var jyh = new Class('jyh'); var zxg = new Class('zxg'); //给jyh实例添加私有方法: jyh.intro = function(job,love,appearance){console.log(this.name+','+job+','+love+','+appearance)}; //给jyh实例添加一个相同私有方法,但是使this上下文指向zxg实例: //注意,使用bind方法,是不执行方法的,只是改变方法里的上下文,并且传入执行该方法时的参数 jyh.introOther = jyh.intro.bind(zxg,'php'); jyh.intro('web-front-end','rabbit','bad'); //指针指向自己,传入参数 //除了bind时候传入的参数,执行的时候还可以继续传入参数,bind时传入的参数和执行时传入的参数,依次作为参数被传入执行 jyh.introOther('dog','handsome'); </script>
用法5: 不改变上下文,仅仅为了传参而使用bind:
<script type="text/javascript"> var Class = function(name){ this.name = name; }; var jyh = new Class('jyh'); //给jyh实例添加私有方法: jyh.intro = function(job,love){console.log(job+','+love)}; //尤其适合用在setInterval方法,需要传入空对象{}在第一个参数的位置 var t = setInterval(jyh.intro.bind({},'web-front-end','rabbit'),3000) </script>
相关推荐
JavaScript函数之call、apply以及bind方法案例详解 总结 1、相同点 2、区别 call() 方法 /* 正常模式 */ let obj = { sum(a, b) { console.log(this) return a + b } } // 执行 sum 函数的 apply、bind...
1.call/apply/bind方法的来源 2.Function.prototype.call() 3.Function.prototype.apply() 3.1:找出数组中的最大数 3.2:将数组的空元素变为undefined 3.3:转换类似数组的对象 4.Function.prototype.bind() ...
浅析Javascript中bind()方法的用法与实现_.docx
JS中的call、apply、bind方法详解.pdf
jQuery的bind的函数在实际应用其实不是特别多,只是他可以绑定一个事件,但不会即时触发,也可以通过unbind来解除绑定。
bind()的方法在ie,6,7,8中不适用,需要扩展通过扩展Function prototype可以实现此方法,下面为大家介绍下javascript中bind函数的作用
javascript中利用柯里化函数实现bind方法_.docx
js代码-JavaScript bind方法
详解bind函数
在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。 call() call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。 ...
改变this的指向有三种方法,call,apply,bind。下面先介绍下这三种方法,话不多说了,来一起看看详细的介绍吧 改变this指向 call var a = { name:"aaa", say(type){ console.log(type,this.name); } } a.say...
下面小编就为大家带来一篇浅析Javascript中bind()方法的使用与实现。小编觉得挺
BIND9 参数详解 SC的bind一直以来基本上都是DNS的工业标准,不过BIND一直是漏洞不断,直到出了BIND9,isc的开发人员对bind9进行了重写,才相对好了一点
为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chrome7+支持此方法,opera和safari不支持(MDN上的说明)。 bind的作用和apply,call类似都是改变函数的...
bind bind bind bind
JavaScript函数this指向问题详解 目录 一、 函数内 this 的指向1、普通函数2、构造函数3、对象方法4、事件绑定方法5、定时器函数6、立即执行函数二、改变函数内部 this 指向1、call 方法2、apply 方法3、bind ...