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,因为它只是在方法内部可用
将新属性添加到原型中的代码段是以后添加函数的唯一方法。这种情况下的一个主要区别是,这样的简单赋值在默认情况下将创建可枚举的属性,而类语法将创建不可枚举的属性。你可以用
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);
}