如何在自定义类上调用静态方法? JS

时间:2018-03-09 01:10:59

标签: javascript class methods static

在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)

2 个答案:

答案 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(...)

它是一种工厂功能。