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キーワードが使われる理由を説明した.