2个问题:
阅读@Box9 9的答案后添加:代码A与代码C的区别如何?
代码A:使用.prototype
function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}
employee.prototype.salary=null;代码B:没有.prototype
function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
employee.salary=null;
}代码C:使用.prototype,里面什么都没有
function employee(){}
employee.prototype.name=null;
employee.prototype.jobtitle=null;
employee.prototype.born=null;
employee.prototype.salary=null;提前道歉,我意识到在.prototype和许多网络教程上还有其他这样的问题,然而这些解释似乎过于简单,或者只是在技术上超出了我的头脑。
发布于 2011-01-21 16:07:33
在您的示例中,代码A是正确的,而代码B则不是。
为了解释,我们可以从三个不同的方面来考虑employee:
prototype。
this在employee()函数中分配的。
employee上设置一个属性。
现在回到您的两个代码示例,
代码A中的employee.prototype.salary = null是正确的,因为它正在为“标准”员工设置起薪。
代码B中的employee.salary = null是不正确的,因为它将所有员工的薪资设置为一个组--也就是说,它不仅仅是一个默认值,而是所有员工的单一总括值。这段代码在employee()函数中并不重要--该函数唯一的不同之处在于它允许您使用this关键字来引用当前由于调用new employee()而构建的“特定”雇员。
发布于 2011-01-21 16:08:58
第一,守则A和B会有不同的结果。代码A有一个对象的构造函数,并将一个属性添加到其原型中。这意味着employee的所有实例都有一个名为salary的字段,该字段为null。与prototype属性的正常行为一样,如果这些实例中的任何一个写入属性,它将为对象创建一个本地副本。
因此,使用代码A:
var e = new employee('Bob', 'janitor', 1978);
alert(e.salary); // null
var f = new employee('Alice', 'teacher', 1976);
f.salary = 20000;
alert(f.salary); // 20000
alert(e.salary); // null在代码B中,没有一个employee实例将工资作为属性,但是构造函数(例如,employee.salary )将存在,并且更像是经典继承中的静态类变量。如果希望为所有实例(例如employee.RETIREMENT_AGE = 65 )提供一个可用的值,则可以这样做,但通常在构造函数之后才这样做,而不是在构造函数中(重复分配相同的东西)。
https://stackoverflow.com/questions/4760658
复制相似问题