您的位置:首页 > 移动开发

Js中的call和apply

2016-03-29 11:44 162 查看
函数有俩个属性,call和apply,这俩属性都是用于动态的改变this,

普通的函数的this都是指向调用函数的对象或者该函数生成对的对象,如下面的例子
function Foo(){
this.name = "ruiy";
this.age = 20;
console.log(this);//Foo{name:"ruiy",age:20}
}
var obj = new Foo();
console.log(obj.name);//ruiy
console.log(obj.age);20
Foo();//Window
obj.fun = function(){
console.log(this);
}
obj.fun();//Foo{name:"ruiy",age:20}


实际上,Js中的指针复杂要比上述复杂的多,但是记住一点,this的值只在执行的时候有值,在不同的情况下会有不同的值,但是都和调用它的执行环境有关,基本指向当前活动的对象。

下面回到call函数,apply就是将传入的参数以数组的形式传入即可,其他都相同

function changeStyle(attr,value){
// console.log(this);
// console.log(this.style);
this.style[attr] = value;
console.log(this);
}
window.onload = function(){
console.log(this);//Window对象
var oDiv = document.getElementById("box");
window.changeStyle.call(oDiv,"height","200px");//<div>对象
}


可以上述代码的log看出,函数调用call将自己应用的对象改变了,即原来是在window对象下,然后调用之后,这个函数应有于oDiv对象了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: