Class.prototype.aFunction() vs Class.aFunction()
Class.prototype.aFunction() vs Class.aFunction()
示例代码:
var Class = function() {
}
Class.prototype.nonStaticFunction = function() {
}
Class.staticFunction = function() {
}
与nonStaticFunction
相比,staticFunction
是否存在速度、内存或任何其他显著特性?
我相信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在定义时间之后创建,所以内存使用是相同的。
- 对象查找在本机代码中由哈希表完成,[[GetProperty]]无论在原型链的哪个位置找到键,都不会有明显的不同。
- 创建实例比不创建实例更昂贵,但是如果你无论如何都需要创建一些东西,那么所花费的时间没有任何收益或损失。
JavaScript并没有真正的类,这些是来自经典语言的结构,但是JavaScript是一种原型语言。
JavaScript中所有的对象,这些对象可以用两种不同的方式链接在一起
通过属性(你可能已经习惯了),例如
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) )
class
是语法糖用于定义具有原型的构造器,就像您在ES 5中所做的那样。Java和JavaScript是完全不同的语言,不要因为它们的名字就认为它们相似。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 通过id和class属性获取元素
- 菜单栏class=活动引导程序主题无法正常工作
- $(.class).empty总是缺少一个元素
- jQuery[button.class]未检测到用按钮追加行
- javascript点击函数不;不适用于ID和Class
- HTML class=Ajax操作,如何让类点击调用好的操作
- Add a class if var < 0 jquery
- 将鼠标悬停在Angular JS中的一个元素上,并将Class添加到另一个元素中
- Difference between methods of defining JavaScript 'class
- todomvc Backbone's更改为class'编辑'使todo可编辑
- 使用jQuery隐藏和显示具有相同Class的类
- JQuery选择器:如果同级具有.class,则选择td
- jQuery:具有class但不具有$(this)的元素
- Why does "document.querySelector('a.some class'
- Javascript add class 不起作用
- 为什么设置 element.className = null 会导致 class=“null”
- Class.create()上的Comatose(rails插件)javascript错误
- Class.prototype.aFunction() vs Class.aFunction()