Javascript 如何将`this`与ES6类原型方法绑定
我有一个名为B的简单类,它有一个基本属性。我有一个名为print的原型方法,它将打印该类属性。现在,如果我使用正常的函数语法,一切都正常了。我想为我的原型使用arrow函数语法,我已经知道Javascript 如何将`this`与ES6类原型方法绑定,javascript,ecmascript-6,this,es6-class,arrow-functions,Javascript,Ecmascript 6,This,Es6 Class,Arrow Functions,我有一个名为B的简单类,它有一个基本属性。我有一个名为print的原型方法,它将打印该类属性。现在,如果我使用正常的函数语法,一切都正常了。我想为我的原型使用arrow函数语法,我已经知道这个内部的arrow函数将引用全局(窗口)对象。我想要这个来绑定我的类。有什么办法可以实现吗 class B { constructor() { this.name ="kannan"; } } B.prototype.print = function(){ console.log(
这个内部的arrow函数将引用全局(窗口)对象。我想要这个
来绑定我的类。有什么办法可以实现吗
class B {
constructor() {
this.name ="kannan";
}
}
B.prototype.print = function(){
console.log(this);
console.log(this.name);
}
let name = new B();
name.print() //Prints my name and works correctly
但是,如果我尝试使用箭头语法
B.prototype.print = () => {
console.log(this);
console.log(this.name);
}
name.print() //prints this as a global window object
如何实现用箭头语法打印我的名字?我不是100%确定,但是普通函数语法从它运行的地方获取上下文。箭头语法从初始化位置获取其上下文
尝试在构造函数中设置proto,它会将“this”打印为类的实例
备选方案:
编写print作为类的一个函数,您不应该有任何问题
我认为在处理此类实例时,在类上使用原型并不漂亮。语法是用来表达目的的。不要把特定的语法本身作为你的目的。你不能在原型中使用箭头函数,因为它们是无上下文的。但是,您可以在构造函数中声明它们,但这与继承的意义相反。