Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将`this`与ES6类原型方法绑定_Javascript_Ecmascript 6_This_Es6 Class_Arrow Functions - Fatal编程技术网

Javascript 如何将`this`与ES6类原型方法绑定

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(

我有一个名为B的简单类,它有一个基本属性。我有一个名为print的原型方法,它将打印该类属性。现在,如果我使用正常的函数语法,一切都正常了。我想为我的原型使用arrow函数语法,我已经知道
这个
内部的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作为类的一个函数,您不应该有任何问题


我认为在处理此类实例时,在类上使用原型并不漂亮。

语法是用来表达目的的。不要把特定的语法本身作为你的目的。你不能在原型中使用箭头函数,因为它们是无上下文的。但是,您可以在构造函数中声明它们,但这与继承的意义相反。