JavaScript中类和对象的区别

18

这两者之间有什么区别:

var myView = function () {
//something goes here
};
并且
var myView = function () {
//something goes here
    return {
        a: x,
        b: y
}();

我认为第一个片段创建了一个“动态”的类,这样你就可以这样说:

var anotherView = new myView();

第二个代码片段类似于一个单例的“动态”对象,但是我不太确定。

3个回答

16
Javascript使用原型继承,因此没有类。一切都是对象;只是有些对象有一个共同的父对象,当名称解析查找原型链时,将找到其方法/变量。
您的第一个代码片段创建了一个名为myView的对象,其类型为函数。您的第二个片段定义了一个匿名方法,该方法返回一个对象(具有ab两个属性),然后立即调用此方法,将结果分配给myView。因此,在这种情况下,myView是一个具有两个自定义属性的对象。
阅读道格拉斯·克罗克福德关于Javascript中的原型继承的描述可能会对您有所帮助,因为听起来您对细节有点模糊。

1
我知道JS中没有类,我在使用“类”这个术语时有些随意 - 这是我的错误!不过话说回来,非常感谢你的解释。 - JamieJag

2

JavaScript 中没有类。

正如你所提到的,你的第一个例子是用于可重复使用的对象,而第二个例子仅用于单例对象。

这里的主要区别在于,在第二个示例中立即调用了该函数并向您返回一个对象,而您需要使用类似 a=new myView() 的方式显式地每次调用第一个函数,其中 () 提供了该调用。

我使用你的第二个例子(也称为 Crockford 模块模式)来处理与页面相关的一次性任务,而使用第一个例子来处理该页面内可重复使用的组件(例如多次生成带有处理程序的某些元素)。

还要阅读关于原型继承的文章,以便了解如何有效地使用第一个例子编写性能更好的 JavaScript 代码。


6
ECMA 2015在JavaScript中引入了类。 - Raja Rama Mohan Thavalam

0

var myView = function () { //这里放一些代码 };

这是一个未执行的函数表达式。 而且 var myView = function () { //这里放一些代码 return { a: x, b: y }(); 由于在函数后面加上了括号"()",这个函数表达式被执行,返回一个对象。

同样地,New关键字用于创建构造函数,不能应用于对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接