Class 在es6类定义之后,我可以在它上添加一个方法吗?

Class 在es6类定义之后,我可以在它上添加一个方法吗?,class,methods,ecmascript-6,super,Class,Methods,Ecmascript 6,Super,方法 作用 method() {} 以上只是阐述方法和函数之间的区别 function func() {} 在上节课中,写下定义之后。 我想向类中添加一个method2,类似于method1。 我可以添加像soo这样的函数 class Student { constructor(name, age) { this.name = name; this.age = age; } method1(){} } 但是我没有办法在同一个类上添加方法。在函数内部,我不能使

方法

作用

method() {}
以上只是阐述方法和函数之间的区别

function func() {}
在上节课中,写下定义之后。 我想向类中添加一个method2,类似于method1。 我可以添加像soo这样的函数

class Student {
  constructor(name, age) {
    this.name = name;
    this.age = age;  
  }
  method1(){}
}
但是我没有办法在同一个类上添加方法。在函数内部,我不能使用super,因为它只是在方法内部可用

  • 在定义类之后,有没有一种方法可以添加方法
  • 这样我就可以在里面使用super了

  • 将新属性添加到原型中的代码段是以后添加函数的唯一方法。这种情况下的一个主要区别是,这样的简单赋值在默认情况下将创建可枚举的属性,而类语法将创建不可枚举的属性。你可以用

    Student.prototype.func = function(){...}
    
    至少要解决这个问题


    不幸的是,正如您所看到的,向原型添加东西之后不允许使用
    super.foo
    。这是不受支持的,因为
    super
    的行为特别基于类语法内部的方法语法
    method(){}
    的词汇嵌套。以后以编程方式添加的方法将无法知道哪个原型是“超级”原型。

    如前所述,您只能在常规的
    类定义中使用
    super()
    。但是,早在我们使用ES6之前,我们就已经手动调用父方法实现了。可以使用母公司的原型来完成:

    Object.defineProperty(Student.prototype, "func", {
      configurable: true,
      writable: true,
      value: function() {
    
      },
    });
    

    当然,通常你可以在
    类声明中声明你的所有方法,所以这不是你通常需要做的事情。

    更接近规范的是
    Reflect.get(Person.prototype,“talk”,this)。call(this,data)
    ,但是谁为一个方法做了getter。。。
    class Person {
        talk() {
           // some implementation here
        }
    }
    
    class Student extends Person {
      constructor(name, age) {
        this.name = name;
        this.age = age;  
      }
    }
    
    Student.prototype.talk = function(data) {
       // now call base method manually
       Person.prototype.talk.call(this, data);
       // then do our extra work
       log(data);
    }