Javascript Class.prototype.affunction()与Class.affunction()的比较
在示例代码中:Javascript Class.prototype.affunction()与Class.affunction()的比较,javascript,prototype,Javascript,Prototype,在示例代码中: var Class = function() { } Class.prototype.nonStaticFunction = function() { } Class.staticFunction = function() { } 静态功能是否比非静态功能具有速度、内存或任何其他重要特征 我相信staticFunction有以下特点,但我肯定我遗漏了一些,我想知道什么时候使用它们 此关键字将是类函数,而不是对象 无需实例化类对象即可使用 它们有完全不同的用例 Cla
var Class = function() {
}
Class.prototype.nonStaticFunction = function() {
}
Class.staticFunction = function() {
}
静态功能
是否比非静态功能
具有速度、内存或任何其他重要特征
我相信staticFunction
有以下特点,但我肯定我遗漏了一些,我想知道什么时候使用它们
关键字将是此
函数,而不是对象类
- 无需实例化
对象即可使用类
Class.staticFunction; // function () {...}, `this` defaults to `Class`
Class.nonStaticFunction; // undefined
因此,如果我们想使用Class
作为名称空间,您应该选择称为“staticFunction”的样式
因此,如果我们想使用Class
作为构造函数,您应该选择称为“非静态函数”的样式
- 在这两种情况下,都没有在定义时间之后创建staticFunction或nonStaticFunction的新实例,因此内存使用情况是相同的
- 对象查找是通过本机代码中的哈希表完成的,无论在原型链中的何处找到密钥,都会有明显的不同
- 创建实例比不创建实例要昂贵,但是如果您无论如何都需要创建一些东西,那么所花费的时间就不会有任何收益或损失
JavaScript并没有真正的类,这些类是来自经典语言的结构,但JavaScript是一种原型语言 JavaScript中只有对象,这些对象可以通过两种不同的方式链接在一起
- 按属性(你可能已经习惯了),例如
- 通过原型链,例如
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) )
Java和JavaScript是完全不同的语言,不要因为它们的名称而认为它们是相似的。我明白了,我想我应该进一步完善我的问题。在Java中,人们倾向于使用静态方法来减少内存占用等。javascript中的这个
静态函数
是否有这样的优势?我们完全同意Java到js就像面包到网球鞋一样,没有关系。“创建实例比不创建实例要昂贵,但如果你无论如何都需要创建一些东西,那么在时间上就不会有任何收获或损失。”这与我所寻找的更为接近。一个是在对象的给定实例上调用的实例方法obj.method()
,另一个是静态方法,它只是作为普通的命名空间函数调用Class.func()
。
foo = {};
foo.bar = {};
foo.bar.baz = {fizz: 'buzz'};
foo.bar.baz.fizz; // "buzz"
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) )