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 定义了一个匿名方法,该方法返回一个对象(具有两个属性,ab),然后立即调用此方法,将结果分配给 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中类和对象的区别的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 中类和对象的区别

如何理解Javascript中类和对象这两个概念

如何理解javascript中类和对象这两个概念?

CSS中的伪类和伪对象

在java中,在一个类中取Application的对象如何取?

什么是类? 什么是对象? 类和对象的区别是什么? 如何定义一个类、类