![](/img/trans.png)
[英]Difference between object augmentation and class augmentation in javascript
[英]Difference between a class and an object in Javascript
有什么区别
var myView = function () {
//something goes here
};
和
var myView = function () {
//something goes here
return {
a: x,
b: y
}();
我认为第一个片段创建了一个“动态”类,所以你可以说
var anotherView = new myView();
第二个片段类似于单个“动态”对象,但我不太确定。
JavaScript使用原型继承,所以有没有阶级本身。 一切都是一个对象; 只是某些对象有一个共同的父对象,当名称解析查找原型链时,会找到其方法/变量。
您的第一个代码段创建了一个名为myView
的对象,其类型是一个函数。 你的第二个片段定义了一个匿名方法,它返回一个对象(有两个属性, a
和b
),然后立即调用这个方法,将结果分配给myView
。 所以在第二种情况下, myView
是一个具有两个自定义属性的对象。
它可能会帮助你阅读道格拉斯克罗克福德在Javascript中对原型继承的描述,因为它听起来你对细节有点模糊。
javascript中没有类。
正如您所提到的,您的第一个示例是针对可重用的对象,而您的第二个示例仅针对单个对象。
这里的主要区别是你在第二个例子中立即调用该函数并且它向你返回一个对象,而你需要每次使用类似a=new myView()
东西显式调用第一个函数它是()提供该调用。
我将第二个示例(称为crockford的模块模式)用于一个关闭页面的相关任务,以及该页面中可重用组件的第一个示例(使用处理程序等多次生成一些元素)
另请阅读有关原型继承的内容,以便您可以了解如何有效地使用第一个示例来编写性能更好的javascript代码。
var myView = function () { //something goes here };
这是函数表达式而不执行。 并且var myView = function () { //something goes here return { a: x, b: y }();
由于括号“()”在函数之后放置导致返回Object,因此执行此函数表达式。
New
关键字用于创建构造函数,不适用于Object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.