Class.prototype.aFunction() 对比 Class.aFunction()
Class.prototype.aFunction() vs Class.aFunction()
在示例代码中:
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"[= 的样式64=]
(new Class).staticFunction; // undefined
(new Class).nonStaticFunction; // function () {...}, `this instanceof Class`
因此,如果我们想将 Class
用作 构造函数 ,您需要选择调用 "nonStaticFunction"[= 的样式64=]
- 在这两种情况下,在定义时间后都没有创建 staticFunction 或 nonStaticFunction 的新实例,因此内存使用是相同的。
- 对象查找是通过本机代码中的哈希表完成的,[[GetProperty]]无论在原型链中的哪个位置找到键,都会有不明显的不同。
- 创建实例比不创建实例更昂贵,但如果您无论如何都需要创建一些东西,那么所花费的时间就没有收益或损失。
Java脚本实际上没有类,这些是古典语言的结构但是Java Script 是一种原型语言。
我们在 JavaScript 中只有 Objects,而这些 Objects 可以用两种不同的方式链接在一起
按属性(您可能已经习惯了),例如
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) )
ES 6 class
是 语法糖 用于定义 构造函数 和 原型 就像在 ES 5.
中一样
Java和JavaScript是完全不同的语言,不要以为它们相似因为他们的名字。
在示例代码中:
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"[= 的样式64=]
(new Class).staticFunction; // undefined
(new Class).nonStaticFunction; // function () {...}, `this instanceof Class`
因此,如果我们想将 Class
用作 构造函数 ,您需要选择调用 "nonStaticFunction"[= 的样式64=]
- 在这两种情况下,在定义时间后都没有创建 staticFunction 或 nonStaticFunction 的新实例,因此内存使用是相同的。
- 对象查找是通过本机代码中的哈希表完成的,[[GetProperty]]无论在原型链中的哪个位置找到键,都会有不明显的不同。
- 创建实例比不创建实例更昂贵,但如果您无论如何都需要创建一些东西,那么所花费的时间就没有收益或损失。
Java脚本实际上没有类,这些是古典语言的结构但是Java Script 是一种原型语言。
我们在 JavaScript 中只有 Objects,而这些 Objects 可以用两种不同的方式链接在一起
按属性(您可能已经习惯了),例如
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) )
ES 6 class
是 语法糖 用于定义 构造函数 和 原型 就像在 ES 5.
Java和JavaScript是完全不同的语言,不要以为它们相似因为他们的名字。