0

这种方法结构/调用之间有什么区别?
我经常看到不同的方法结构,我无法理解每种方法的好处。

var obj = {
    some_method: function(){
        return 'This works';
    }
}

var Obj2 = function(){
    return {
        some_method: function(){
            return 'This works too';
        }
    }
}

console.log(obj.some_method());

var obj3 = new Obj2();
console.log(obj3.some_method());

他们都返回了他们应该返回的东西,这里是JsFiddle,但是在什么情况下我应该使用它们中的每一个?

4

2 回答 2

1

第一个类似于单例,IE 你不能拥有多个相同类型但具有不同状态的对象。就像在你的整个应用程序中只能有一个实际的动物而不是很多。

一个更实际的例子,考虑这个页面。有多个Posts,每个都有自己的状态(Comment它们有什么,它们有什么文本,它们当前是否正在编辑等等)。如果您只是这样做了var post =,那意味着只能有一个帖子。我怀疑您可能会使用一些临时 jQuery 来操作该单例中的多个帖子,但是无论如何您都没有对问题进行面向对象的建模。


第二个是错误地使用构造函数,创建的对象不会是Obj2but的实例Object。您将使用如下构造函数:

function Obj2() {
   //initialize fields here
}

Obj2.prototype.someMethod = function(arg) {
     return this.state + arg;
};

返回对象字面量在构造函数中起作用的原因是构造函数可以返回任何类型的对象。Object但是仅仅为了返回s而创建一个构造函数是没有意义的。

您通常Object只需要 s 将相关的静态功能分组在一起(行为,但没有延长的数据)或作为字典/地图/关联数组(数据但没有行为)。

于 2013-08-07T12:52:04.317 回答
0

在第一个代码中,您正在调用obj.some_method(). some_method是一个函数,嵌套为 的属性obj。这种模式是命名空间的一种方式。

在第二种情况下,您正在创建一个对象,将Obj2其用作构造函数。但是,您没有返回 的实例,而是返回了Obj2一个与前一个示例具有相同结构的对象obj。这会给你错误的instanceof测试结果,因为new Obj2应该返回一个自身的实例,而你的代码没有这样做。

于 2013-08-07T12:53:29.877 回答