在javascript中,我创建了一个类Group,它创建一个名为items的空数组并返回它。
但我正在尝试从(){}创建一个静态方法,该方法接受一个可迭代对象并从该可迭代obj创建一个新组。
我正在尝试this.items.push()但是我的工作方式并不正常
class Group(){
constructor(){
this.items = []
}
from(obj){
for(let item of obj){this.items.push(item)}
}
}
我会像这样实现它:
let group = Group.from([10, 11))//random numbers
它很遗憾地返回以下错误:
TypeError: Cannot read property 'push' of undefined (line 37 in function
Function.from)
答案 0 :(得分:2)
您遇到语法错误:
class Group(){
应该是:
class Group { // no parameter list here
与类语法一样,参数在构造函数中定义。
如果构造函数将方法添加到“class”实例,如下所示,该方法可用于实例,而不是构造函数本身。您必须创建一个实例,然后调用方法:
class Group {
constructor () {
this.items = [];
}
from (obj) {
for (let item of obj) {
this.items.push(item);
}
}
}
var group = new Group();
group.from([1,2]);
console.log(group.items); // 1, 2
console.log(typeof Group.from); // undefined
答案 1 :(得分:1)
虽然JS类上有新的静态语法草稿,但您现在需要将原型用于静态方法/属性。
class Group {
constructor(){
this.items = []
}
}
Group.prototype.from = function(obj){
var group = new Group;
for(let item of obj) group.items.push(item);
return group;
}
let group = aGroudInstance.from([10, 11]);
您可能只想将方法添加到Group类(对象)中,如下所示:
Group.from = function(...) ...;
因为它实际上并没有使用静态方法,并且不必要地需要Group
的实例 - 除非您像这样使用它:Group.prototype.from(...)
。
它是一种工厂功能。