Js中的call和apply

函數有倆個屬性,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對象了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章