【问题标题】:JavaScript Class Static Method, but in function? [duplicate]JavaScript 类静态方法,但在函数中? [复制]
【发布时间】:2020-10-17 17:24:42
【问题描述】:

据我所知,有两种方法可以在 javascript 中创建类,使用函数或类语句。 如果在语句类中,您可以使用静态关键字创建静态方法。 那么如果它起作用了,你如何创建静态方法呢?

class SomeClass {
  myMethod() {
    console.log("Some");
  }
}

// equivalent to

function SomeClass() {
  this.myMethod = function() {
    console.log("Some");
  }
}

==================================================
==================================================
//Now static method

class SomeClass {
  static myMethod() {
    console.log("Some");
  }
}

// equivalent to

function SomeClass() {
  ???
}

【问题讨论】:

标签: javascript


【解决方案1】:

静态方法只是放在函数本身上的方法。所以,更确切地说:

class SomeClass {
  static myMethod() {
    console.log("Some");
  }
}

// equivalent to

function SomeClass() {}

SomeClass.myMethod = function(){
  console.log("Some")
}

另请注意(尽管这与您的问题无关),您的前两个代码不相等

它们在某种程度上表现相同,但它们是不同的。

classes 在他们的原型上定义方法,而你的 function 东西在每个实例的基础上创建它。因此:

class SomeClass {
  myMethod() {
    console.log("Some");
  }
}

function SomeFn() {
  this.myMethod = function() {
    console.log("Some");
  }
}

const a = new SomeClass
const b = new SomeFn
const a2 = new SomeClass
const b2 = new SomeFn

a.myMethod() //Some
b.myMethod() //Some

console.log(a.myMethod === a2.myMethod) //true
console.log(b.myMethod === b2.myMethod) //false

因此,它应该是:

class SomeClass {
  myMethod() {
    console.log("Some");
  }
}

// equivalent to

function SomeClass() {}

SomeClass.prototype.myMethod = function() {
    console.log("Some");
}

【讨论】:

  • … 建议的重复目标中的答案已经涵盖了这一点。
  • @user4642212 没错,但我在你发现之前就开始写了。我快速搜索了一下,但什么也没找到……
猜你喜欢
  • 2021-06-04
  • 2011-01-07
  • 2012-04-21
  • 2014-10-28
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多