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

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


你可能感兴趣的:(java-web,javascript,jquery,java,javascript,html,javaweb,call,apply)