call(thisObj,arg1,arg2...)、apply(thisObj,[obj1,obj2...])这二个方法是每个函数都包含的非继承的方法call(thisobj[, args])和apply(thisobj[, args])作用都是一样的,简单来说就是改变当前使用该方法的对象中的this指向,指向调用方法中的thisObj对象二者的区别(第一个参数是相同的)就是call方法中传入的参数是是一个个列举出来的,而apply方法中的参数二是一个数组还是举例说明比较直观:
window.color='red';var o={color:"blue"};function sayColor(){alert(this.color);};sayColor(); //red(全局函数,this是window)sayColor.call(this);//red(调用call方法,指定对象是this,这里的this是window,没什么意义)sayColor.call(window);//red(调用call方法,指定对象是window,没什么意义)sayColor.call(o); //blue (调用call方法,指定对象是o,所以this指代对象o,这里由原来的window指向了o)sayColor.apply(o);//blue (调用call方法,指定对象是o,所以this指代对象o,这里由原来的window指向了o)ECMAScript5中的bind()方法和前二种方法相似,bind()这个方法会创建一个函数的实例,这个实例的this值会被绑定到传递给bind()函数的值
例子:function a(y){return this.x+y;};var o={x:1};var g=a.bind(o);g(2);//3从例子中可以看出函数a绑定到对象o上了,并且返回了新的函数g,调用g时,a函数会当作对象o的方法来调用bind()这个方法是将函数绑定到某个对象上,并且返回一个新的函数,这个新函数中传入的参数都将传入被绑定的函数上。
新闻热点
疑难解答