我看到JavaScript中的对象通常以以下两种方式组织。有人可以解释一下两者的区别和好处吗?在某些情况下,哪个更适合另一个吗?

非常感谢任何澄清。非常感谢!

第一:

   var SomeObject;

    SomeObject = (function() {

     function SomeObject() {}

         SomeObject.prototype.doSomething: function() {

         },
         SomeObject.prototype.doSomethingElse: function() {

         }

    })();

第二:
SomeObject = function() {

 SomeObject.prototype.doSomething: function() {

 },
 SomeObject.prototype.doSomethingElse: function() {

 }

}

最佳答案

这两个例子都不正确。我想你的意思是:

第一:

var SomeObject;
SomeObject = (function() {

    function SomeObject() {
    }

    SomeObject.prototype.doSomething = function() {
    };

    SomeObject.prototype.doSomethingElse = function() {
    };

    return SomeObject;

})();

(请注意匿名函数末尾的返回,使用=而不是:以及分号来完成函数分配。)

也许您的意思是:
function SomeObject() {
}

SomeObject.prototype.doSomething = function() {
};

SomeObject.prototype.doSomethingElse = function() {
};

(没有匿名封闭功能。)

第二:
function SomeObject() {
}
SomeObject.prototype = {

    doSomething: function() {
    },
    doSomethingElse: function() {
    }
};

(请注意,原型(prototype)的赋值在SomeObject函数外部;在这里,我们使用:是因为我们在对象初始化器内部。此外,我们在末尾也添加了;来完成赋值语句。)

如果我是正确的话,它们之间几乎没有什么区别。他们两个都创建了一个SomeObject构造函数,并向其原型(prototype)添加了匿名函数。第二个版本用一个全新的对象替换了SomeObject构造函数的原型(prototype)(我不推荐),第一个版本只是增强了SomeObject构造函数已经具有的原型(prototype)。

一个更有用的形式是:
var SomeObject;
SomeObject = (function() {

    function SomeObject() {
    }

    SomeObject.prototype.doSomething = doSomething;
    function doSomething() {

    }

    SomeObject.prototype.doSomethingElse = doSomethingElse;
    function doSomethingElse()
    }

    return SomeObject;

})();

在那里,我们分配给doSomethingdoSomethingElse的函数具有名称,这在您在调试器中浏览代码时很有用(它们显示在调用堆栈,断点列表等中)。封装了所有内容的匿名函数在那里,以便doSomethingdoSomethingElse名称不会污染封闭的 namespace 。更多:Anonymouses anonymous

我们中的一些人将其进一步发展:
var SomeObject;
SomeObject = (function() {
    var p = SomeObject.prototype;

    function SomeObject() {
    }

    p.doSomething = SomeObject$doSomething;
    function SomeObject$doSomething() {

    }

    p.doSomethingElse = SomeObject$doSomethingElse;
    function SomeObject$doSomethingElse()
    }

    return SomeObject;

})();

...这样我们不仅可以在列表中看到doSomething,而且可以看到SomeObject$doSomething。有时这可能会妨碍您的工作,但这是一种样式选择。 (还请注意,我使用匿名函数将SomeObject.prototype的别名括起来,以减少键入次数。)

关于javascript - 两种JavaScript对象类型之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10230200/

10-12 15:57