'this'如何在构造函数中工作以在 Javascript 中创建对象



我真的很难理解thisconstructor 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());

现在我可以很容易地得到basicSalarygetWage()方法。我只需要将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

最新更新