我什么时候想在JavaScript中使用"类"(静态)方法或属性?

Mis*_*lin 6 javascript oop static-methods prototypal-inheritance coffeescript

在JavaScript中,为什么要将属性直接附加到构造函数?

var Human = function() {};
Human.specie = "Homo Sapience";
Run Code Online (Sandbox Code Playgroud)

看完CoffeeScript的__extend辅助函数之后,我有了这个问题,其中包含以下几行:

for ( var key in parent ) { 
  if ( __hasProp.call( parent, key ) ) child[key] = parent[key]; 
} 
Run Code Online (Sandbox Code Playgroud)

它将属性/方法直接从构造函数对象复制到子类对象.但是为什么有人这样做呢?

谢谢!

Mis*_*lin 0

简而言之,所发布问题的答案是名称间距。有些值可能有意义在程序中共享,并且在语义上与某些类有关。这些函数和值可以只放入一些变量中,但将它们附加到构造函数是实用的,以便为它们命名空间。

最好的例子是 JavaScriptMath类(对于纯粹主义者来说,我知道它并不是真正的类,而是一个对象):

// There are constants
Math.E
Math.PI
Math.SQRT2
// And there are also methods
Math.ceil
Math.cos
Math.sin
Run Code Online (Sandbox Code Playgroud)

因此,方法和值(保存在常量中)始终相同,并且它们不依赖于它们被调用的实例,并且将它们放在实例上是没有意义的。