我们如何在ES6中使用class关键字来动态添加方法,就像我们在ES5中一样?
https://jsfiddle.net/user1212/7c57eou3/
val result = dataFrame
.groupBy("key")
.agg(
collect_list($"itemList").as("A"), // all items
collect_list(when($"click".isNotNull, $"itemList")).as("B") // subset of A
)
// create sparse item vector from all list of items A
.withColumn("vectorA", aggToSparseUdf($"A"))
// create sparse item vector from all list of items B (subset of A)
.withColumn("vectorB", aggToSparseUdf($"B"))
// calculate ratio vector B / A
.withColumn("ratio", divideVectors($"vectorB", $"vectorA"))
val keys: Seq[String] = result.head.getAs[Seq[String]]("key")
val values: Seq[SparseVector] = result.head.getAs[Seq[SparseVector]]("ratio")
如何在定义类后添加新方法?
答案 0 :(得分:2)
您不使用class
关键字添加更多方法。就像在ES5中一样,您只需将它们分配给原型对象:
class Person { … }
…
Object.assign(Person.prototype, { // Object.assign provides a neater syntax
logName() { // but really is the same as Person.prototype.logName = …
console.log(this.name);
},
alertName() {
alert(this.name);
}
});
答案 1 :(得分:0)
其他人已回答您的具体问题,您可以使用prototype
但提醒一下,如果你要修改class
的原型来添加方法,也许你想使用extends
语法并创建一个"子类",所以你总是使用相同的类逻辑而不触及原型。
对于大多数来自其他语言的程序员来说很难理解prototype-style
classes,所以如果你只能使用ES6 典型的课程风格,我会说去吧。像这样:
class Hello {
constructor(name) {
this.name = name;
}
hello() {
return 'Hello ' + this.name + '!';
}
static sayHelloAll() {
return 'Hello everyone!';
}
}
class HelloWorld extends Hello {
constructor() {
super('World');
}
echo() {
alert(super.hello());
}
}
var hw = new HelloWorld();
hw.echo();
alert(Hello.sayHelloAll());