これを参照すると、関数catのインスタンスが参照されるため、this.nameはcatのインスタンスのnameの値になります。名前の参照(これなし)は、コンストラクターの後のcatの関数の名前を指します。これを読んだ後、あなたはより多くの洞察を得ることができると思います:
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Inheritance_Revisited
ページの下部に次のリンクがあります。クロージャに関する部分に到達すると、name変数とthis.name変数のスコープを理解できるかもしれません。
また、JavaScriptはクラスベースの言語ではありませんが、(一部の人によると実装が不十分な)プロトタイプ言語です。
http://www.lshift.net/blog/2006/07/24/subclassing-in-javascript-part-1
子クラスが親を「サブクラス化」する場合、またはより適切に言うと、childFunctionがプロトタイプとしてparentFunctionを使用する場合、この例が示すように、chidFunction「インスタンス」はその親の遅延コピーを共有することに注意してください。
var parent,child,bill,suzan;
parent=function(){
this.name="parent";
this.array=[];
}
child=function(){
}
child.prototype=new parent();
bill=new child();
bill.name="bill";
suzan=new child();
suzan.name="suzan";
suzan.array.push("done in suzan");
console.log(suzan.name);//correct is suzan
console.log(bill.name);//correct is bill
console.log(bill.array);//incorrect, shows ["done in suzan"]
「子」を次のように変更することで、これを修正できます。
child=function(){
parent.call(this);
}
ただし、これは、オブジェクトプロパティ(関数を除く)がthisを使用して親関数本体で宣言されている場合にのみ機能します。プロトタイプの代わりに構文。