【问题标题】:Difference between a class and an object in JavascriptJavascript中类和对象的区别
【发布时间】: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 类似于单例“动态”对象,但我不太确定。

【问题讨论】:

    标签: javascript object oop


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2020-02-06
      • 2019-02-26
      • 1970-01-01
      • 2016-10-07
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2015-06-24
      相关资源
      最近更新 更多