有人可以解释为什么我会在下列每种情况下得到结果吗?我希望理解为什么结果是关于JavaScript如何在范围内工作的结果,如果这是问题所在。在第一个例子中,我的代码正常工作。解释这个未捕获的类型错误:对象[对象对象]的属性'x'不是函数
var Employees = function(name, salary) {
this.name = name;
this.salary = salary;
this.addSalary = addSalaryFunction;
this.getSalary = function() {
return this.salary;
};
};
var addSalaryFunction = function(addition) {
this.salary = this.salary + addition;
};
var ceo = new Employees("Chris", 400000);
ceo.addSalary(20000);
document.write(ceo.getSalary());
如果我移动addSalaryFunction
到Employees
功能,以下this.addSalary
我得到的遗漏的类型错误。
var Employees = function(name, salary) {
this.name = name;
this.salary = salary;
this.addSalary = addSalaryFunction;
this.getSalary = function() {
return this.salary;
};
var addSalaryFunction = function(addition) {
this.salary = this.salary + addition;
};
};
var ceo = new Employees("Chris", 400000);
ceo.addSalary(20000);
document.write(ceo.getSalary());
但是,如果我移动addSalaryFunction
上述this.addSalary
如果工作正常试。尽管我的IDE告诉我,我的本地变量addSalaryFunction
是多余的。
var Employees = function(name, salary) {
this.name = name;
this.salary = salary;
var addSalaryFunction = function(addition) {
this.salary = this.salary + addition;
};
this.addSalary = addSalaryFunction;
this.getSalary = function() {
return this.salary;
};
};
var ceo = new Employees("Chris", 400000);
ceo.addSalary(20000);
document.write(ceo.getSalary());
[很好的解释](http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/) – RobH
为彻底性。 – rGil
@chris_s:不客气。最终,最干净的解决方案是使用*** rGil ***发布的内容。但是,IMO更好的是通过将所有方法放在'Employees.prototype'上来使用原型继承。然后它们在所有Employee对象之间共享,而不是为每个对象重新创建。 – 2013-05-17 13:33:58