Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中这两个函数声明的区别是什么?_Javascript_Design Patterns_Factory Pattern - Fatal编程技术网

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

Javascript中这两个函数声明的区别是什么?,javascript,design-patterns,factory-pattern,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

我对这两个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().
这第二种情况,也有一个技术名称


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

第一种情况是使用原型。调用newsome会创建一个新对象,在函数执行期间将其设置为该对象,并返回新对象。在这种情况下,调用some是没有意义的,因为在执行某些函数时,尽管函数仍然执行,但没有任何设置

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

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

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

    }
然后呢

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

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

在JS中,函数是第一类对象,因此它们可以具有附加属性,当您调用some2时,实际上是在某个函数上使用对象委托


在第二个代码段中,您使用return在每次调用时返回一个全新的对象,该对象有一个新函数some2。当您启动一个基于新函数的新对象时,您实际上返回了带有新函数的新对象,并且没有像第一个代码片段中那样引用单个对象。

没有回答您的问题,但与此相关