javascript - Javascript 中这两个函数声明有什么区别?

标签 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().

这第二种情况,也有技术名称吗?

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

最佳答案

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

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

与第二种情况类似,有一种叫做闭包的东西。你可以这样做,

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

    }

然后执行

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

关于javascript - Javascript 中这两个函数声明有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42936965/

相关文章:

javascript - 比较二维数组与一维数组并删除匹配的条目 (JavaScript)

JavaScript 过滤数组和映射

java - 是 java hashcode 和 equals 策略模式的示例

java - 什么时候使用抽象工厂模式?

javascript - 外部JS : How to conditionally hide an item in combobox

javascript - 在 HTML5 移动应用程序中播放 m3u8 文件

asp.net - 在数据访问层和业务层上实现哪种模式?

c++ - C++编写的分词器的继承设计

c++ - 具有共享指针和受限构造函数的工厂方法的问题

c# - 令人厌恶的 Hack(基类上使用反射的工厂方法)