天天看點

Javascript構造函數中變量的作用域問題

構造函數可以與new一起使用,代表建立對象;也能夠當做普通的函數調用,因為它也是一個函數。

function Person(name) 
{
	this.name=name;
}

Person(12);
alert(window.name);//12
           

可以看到當構造函數被當成普通函數調用的時候,this代表的是全局的window對象。很顯然把構造函數當成普通函數調用,不是好的做法, 也沒有什麼道理要這麼做。實際中應該杜絕這樣奇怪的用法,以免産生奇怪的問題。

function Person(name,sex) 
{
    this.name=name;
    var name1="22";
    name2=sex;
}
var per = new Person("aty","boy");
alert(per.name);// aty
alert(per.name1);//undefined
alert(per.name2);//undefined
alert(window.name2);//boy
           

構造函數中定義變量使用this是成員變量;使用var是局部變量;不加關鍵字是全局變量,會添加到window對象中。這樣解釋了為什麼構造函數中要使用this關鍵字。