我有以下代码:
class Pet {
constructor(name) {
this.petName = name;
}
}
Pet.prototype.speak = {
name: function() {
console.log(this.petName);
}
};
// -----------------------------------------------
const myPet = new Pet("Max");
myPet.speak.name();
我希望可以打印此代码Max
,但可以打印undefined
。
如果我将console.log更改为console.log(this);
它,则会打印{ name: [Function: name] }
。这使我认为该函数无权访问实例属性。
如何确保此功能可以访问实例?
如果您要定位或支持ES6语言功能,则一种方法可以通过get
结合使用的方法来实现arrow function
。
该get
方法将被声明get speak()
,这意味着它可以在没有括号的情况下被调用。此方法将返回包含name()
箭头功能的对象。使用箭头功能可以让您直接Pet
通过this
关键字访问封闭实例:
class Pet {
constructor(name) {
this.petName = name;
}
// Get method allows the speak method to be called without ()
get speak() {
return {
// Arrow function causes this.petName to refer to petName
// field of this class instance
name: () => {
console.log(this.petName);
}
}
}
}
const myPet = new Pet("Max");
myPet.speak.name();
const yourPet = new Pet("Min");
yourPet.speak.name();
这是有关get方法语法和语言功能的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句