引用 this 指的是函数 cat 的实例,因此 this.name 是 cat 实例中 name 的值。引用name(不带this)是指构造函数后面的cat函数名。我想你读完这篇文章后可能会有更多的见解:
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Inheritance_Revisited
页面底部有一个 next 链接,当您进入关于闭包的部分时,您可能会了解 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 在父函数体中声明对象属性(不包括函数)时才有效。语法而不是原型。