我真的很难理解this
在constructor function
中如何在Javascript环境中创建对象。
下面是代码片段:
function Employee() {
basicSalary = 12000;
overtime = 10;
rate = 200;
this.getWage = function () {
return basicSalary+(overtime*rate);
}
}
let emp = new Employee();
console.log(emp.basicSalary);//undefined
console.log(emp.getWage());//14000
在上面的代码中,我得到了basicSalary
变量的undefined
。所以为了得到basicSalary
的值,我在函数中加上this
,比如:
this.basicSalary = 12000;
但是,在这样做的过程中,我在访问getWage()
方法时遇到了错误。上面写着:
Uncaught ReferenceError: basicSalary is not defined
at Employee.getWage (index.js:6)
at index.js:11
但是,如果我在getWage()
函数内的返回语句中,将this
前缀为basicSalary
,则我可以访问basicSalary
变量和getWage()
方法。
此外,如果我将所有代码替换为factory function
,即像这里这样的对象文字类型:
function employee(){
return {
basicSalary : 12000,
overtime : 10,
rate : 200,
getWage:function(){
return this.basicSalary+(this.overtime*this.rate); // accessing values through `this`
}
};
}
const e2 = employee();
console.log(e2.basicSalary);
console.log(e2.getWage());
现在我可以很容易地得到basicSalary
和getWage()
方法。我只需要将this
放入getWage()
方法中的return
语句中。
在这两种方法中,CCD_ 19的工作方式不同。我很困惑。请分享一些关于如何在Javascript中使用this
的知识。
在第一种情况下,您要么(隐式(声明新的局部变量(范围为函数的执行(,要么引用存在于更高范围中的全局变量。
它们不绑定到使用new
返回的对象。
在第二种情况下,您将返回一个对象文字,因此它们显然与之绑定。
阿米特的密码很好。你也可以这样做:
function Employee() {
this.basicSalary = 12000;
this.overtime = 10;
this.rate = 200;
this.getWage = () => this.basicSalary + (this.overtime*this.rate)
}
如果您有箭头函数,那么您也有ES6类。这可能是一个更好的匹配。
一旦你阅读了我评论的文章,你就可以尝试一下。
function Employee() {
this.basicSalary = 12000;
this.overtime = 10;
this.rate = 200;
this.getWage = function () {
return this.basicSalary + (this.overtime*this.rate);
}
}
let emp = new Employee();
console.log(emp.basicSalary);//12000
console.log(emp.getWage());//14000