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

来源:互联网 发布:面试问题 知乎 编辑:程序博客网 时间:2024/05/29 18:55

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:undefineddocument.getElementById("simpleForm1").onclick = function(){//2-name:yangzai,age:10simpleForm1.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其实也是函数调用的一种方式,下面我们指定了作用域为simpleForm2var 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:20document.getElementById("simpleForm1").onclick = simpleForm1.submit.apply(simpleForm2);//name:datou,age:20


0 0
原创粉丝点击