Javascript中类和对象的区别
Posted
技术标签:
【中文标题】Javascript中类和对象的区别【英文标题】:Difference between a class and an object in Javascript 【发布时间】:2011-03-27 22:03:11 【问题描述】:有什么区别
var myView = function ()
//something goes here
;
和
var myView = function ()
//something goes here
return
a: x,
b: y
();
我认为第一个sn-p创建了一个“动态”类,这样你就可以说
var anotherView = new myView();
第二个 sn-p 类似于单例“动态”对象,但我不太确定。
【问题讨论】:
【参考方案1】:javascript 使用原型继承,因此 本身没有类。一切都是对象;只是有些对象有一个共同的父对象,其方法/变量会在名称解析查找原型链时找到。
您的第一个代码 sn-p 创建了一个名为 myView
的对象,其类型是一个函数。您的第二个 sn-p 定义了一个匿名方法,该方法返回一个对象(具有两个属性,a
和 b
),然后立即调用此方法,将结果分配给 myView
。所以在第二种情况下,myView
是一个具有两个自定义属性的对象。
阅读 Douglas Crockford 对 prototypal inheritance in Javascript 的描述可能会对您有所帮助,因为听起来您对细节有些模糊。
【讨论】:
我知道 JS 中没有类,我在广义上使用了“类”这个词——我的错!不过,话虽如此,还是谢谢你的解释。【参考方案2】:javascript 中没有类。
正如您所提到的,您的第一个示例将用于可重用对象,而您的第二个示例仅用于单例对象。
这里的主要区别在于,您在第二个示例中立即调用该函数并返回一个对象给您,而您每次都需要使用a=new myView()
之类的东西显式调用第一个函数,它是 ()提供该调用。
我将您的第二个示例(称为 crockford 的模块模式)用于与页面外相关的任务,并将第一个示例用于该页面中的可重用组件(某些元素通过处理程序等多次生成)
还可以阅读有关 protoypal 继承的内容,以便了解如何有效地使用第一个示例来编写性能更好的 javascript 代码。
【讨论】:
ECMA 2015 js引入类【参考方案3】:var myView = function ()
//something goes here
;
这是未执行的函数表达式。
和
var myView = function ()
//something goes here
return
a: x,
b: y
();
由于函数后面的括号“()”位置导致返回 Object,因此该函数表达式被执行。
再次New
关键字用于创建构造函数,不适用于Object。
【讨论】:
以上是关于Javascript中类和对象的区别的主要内容,如果未能解决你的问题,请参考以下文章