在 JavaScript 中,为什么要将属性直接附加到构造函数?
var Human = function() {};
Human.specie = "Homo Sapience";
在查看 CoffeeScript 的 __extend
辅助函数后,我得到了这个问题,其中包含:
for ( var key in parent ) {
if ( __hasProp.call( parent, key ) ) child[key] = parent[key];
}
直接从构造函数对象复制属性/方法到子类对象。但是为什么会有人这样做呢?
谢谢!
最佳答案
(编辑:在其原始形式中,问题询问的是将属性附加到类还是将它们附加到原型(prototype),这就是我要回答的问题。)
这实际上更像是一个约定俗成的问题。如果你写
Human::specie = "Homo sapiens"
(其中 Human::specie
是 Human.prototype.specie
的 CoffeeScript 简写)然后声明 jane = new Human
,然后 jane.specie
将是 "Homo sapiens"
(除非您专门将 jane.specie
设置为其他内容)。在这种情况下,这听起来很可取。
但在其他情况下,在大量原型(prototype)之间共享一个属性会使您的代码更难理解。假设您有一个带有 config
对象的 Logger
类。如果将该对象附加到原型(prototype),则可以编写如下代码:
log = new Logger
log.config.destination = './foo'
这会将 所有 Logger
实例的目的地更改为 './foo'
,因为只有一个 config
对象。如果您希望 config
应用于所有 Logger
实例,那么您应该将其附加到适当的类,从而消除上面代码中的歧义:
log = new Logger
Logger.config.destination = './foo'
关于javascript - 我什么时候想在 JavaScript 中使用 “class”(静态)方法或属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6517040/