方法
method() {}
功能
function func() {}
以上只是详细说明方法与功能的区别。
class Student {
constructor(name, age) {
this.name = name;
this.age = age;
}
method1(){}
}
在上面的类中,写完定义之后。 我想在类中添加一个方法2,类似于method1的方式。 我可以添加像soo
这样的函数Student.prototype.func = function(){...}
但我无法在同一个类上添加方法。在内部函数中,我将无法使用super,因为它只在方法中可用。
答案 0 :(得分:1)
您的片段向原型添加新属性只是稍后添加功能的方法。在这种情况下的一个主要区别是,像这样的简单赋值将默认情况下将属性创建为可枚举,而类语法将创建为不可枚举。你可以用
Object.defineProperty(Student.prototype, "func", {
configurable: true,
writable: true,
value: function() {
},
});
至少解决这个问题。
不幸的是,正如您所见,之后向原型中添加内容不允许使用super.foo
。没有办法支持这一点,因为super
的行为特别基于方法语法method(){}
的词法嵌套在类语法中。稍后以编程方式添加的方法将无法知道哪个原型是" super"之一。
答案 1 :(得分:1)
正如已经解释的那样,您只能在常规super()
定义中使用class
。但是,在我们使用ES6之前,我们手动调用了父方法实现。可以使用父母的原型来完成:
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);
}
当然,通常你可以在class
声明中声明所有方法,所以这通常不是你通常需要做的事情。