Javascript中这两个函数声明之间的区别是什么?

时间:2017-03-21 19:54:57

标签: javascript design-patterns factory-pattern

我对这两个javascript案例有疑问:

function some() {
    this.some2 = function() {//this is associated with own object(Correct?)
        console.log('some2');
    }
}

var __s1 = new some();
__s1.some2();//Allright, this do the work;
//some().some2();//This not work

此声明类型有技术名称吗?对象模式可能?

另一个类似的例子是:

function some() {
    return {
        some2: function() {
            console.log('some2');
        }
    }
}

var __s2 = new some();
__s2.some2(); // Right, this work;
some().some2(); //Also work ... Ok, "some()" returns a object that contain
                //the some2().

这第二种情况,还有一个技术名称?

他们之间最好的情况是什么?

2 个答案:

答案 0 :(得分:1)

第一个是使用Prototypes。调用new some()创建一个新对象,在函数执行期间将this设置为该对象,并返回新对象。在这种情况下调用some()是没有意义的,因为在执行this时没有任何内容可以设置some(尽管函数仍然执行。)

第二种情况是返回对象的普通函数。它没有技术名称。

与第二种情况类似,称为闭包。你可以做到,

function some() {
    return function() {
        console.log('some2');

    }

然后再做

var s3= some();
s3() //prints some2

答案 1 :(得分:0)

在您的第一个代码段中,您将函数与名为some2的属性相关联。

在JS函数中是第一类对象,所以当你调用some2实际上在some函数上使用对象委托时,它们可以有其他属性。

在您的第二个代码段中,您使用return在每个具有新功能some2的调用中返回一个新的完整对象。当您启动基于(new some())的新对象时,实际上会返回具有新功能的新对象,而不会像在第一个代码段中那样引用单个对象。