在示例代码中:
var Class = function() {
}
Class.prototype.nonStaticFunction = function() {
}
Class.staticFunction = function() {
}
staticFunction
是否比 nonStaticFunction
有速度、内存或任何其他重要特征?
我相信 staticFunction
具有以下特征,但我确定我遗漏了一些特征,我想知道什么时候使用一个而不是另一个。
this
关键字将是Class
函数而不是对象。- 无需实例化
Class
对象即可使用。
最佳答案
它们有完全不同的用例
Class.staticFunction; // function () {...}, `this` defaults to `Class`
Class.nonStaticFunction; // undefined
因此,如果我们想将 Class
用作命名空间,您需要选择称为"staticFunction"
(new Class).staticFunction; // undefined
(new Class).nonStaticFunction; // function () {...}, `this instanceof Class`
因此,如果我们想将 Class
用作构造函数,您需要选择称为"nonStaticFunction"
- 在这两种情况下,都没有在定义时间后创建 staticFunction 或 nonStaticFunction 的新实例,因此内存使用情况相同。
- 对象查找由 native 代码中的哈希表完成,[[GetProperty]]无论在原型(prototype)链中的哪个位置找到 key ,都会有不明显的不同。
- 创建实例比不创建实例更昂贵,但如果您无论如何都需要创建一些东西,那么所花费的时间就没有 yield 或损失。
JavaScript 并没有真正的类,它们是经典语言的结构,但 JavaScript 是一种原型(prototype)语言。
我们在 JavaScript 中拥有的只是对象,这些对象可以用两种不同的方式链接在一起
按属性(您可能习惯的),例如
foo = {}; foo.bar = {}; foo.bar.baz = {fizz: 'buzz'}; foo.bar.baz.fizz; // "buzz"
通过原型(prototype)链,例如
baz = {fizz: 'buzz'}; bar = Object.create(baz); foo = Object.create(bar); foo.fizz; // "buzz" via // no own _fizz_ on `foo` // no own _fizz_ on `bar` ( = Object.getPrototypeOf(foo) ) // own _fizz_ found on `baz` ( = Object.getPrototypeOf(bar) )
ES 6 class
是语法糖,用于像在 ES 5 中一样,用原型(prototype) 来定义构造函数。
Java 和 JavaScript 是完全不同的语言,不要因为名字就认为它们相似。
关于javascript - Class.prototype.Function() 与 Class.a Function(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030662/