我只是对javascript有了更多的了解,并在思考之间的区别
var myfunc = function(){
publicfunctions = {}
publicfunctions.function1 = function(){do smthing and return}
return publicfunctions
}
和
var myfunc = function(){
this.function1 = function(){do smthing and return}
}
在我看来,两者都在做同样的事情
还有人能解释之间的区别吗
var func = (function myfunc(){ .. do smthing and return .. })();
和
var func = function myfunc(){ .. do smthing and return .. }
var newfunc = new myfunc()
感谢
让我们循序渐进。
- 示例:
a(定义一个返回对象的函数(注意变量声明-您应该用var
关键字声明它,以便将其范围限定到您的函数。这些对象有一个指向函数的属性。尽管如此,您的第一个函数还是分配给了变量myfunc
现在,如果您尝试调用myfunc()
,您将得到一个具有单个属性function1
的对象。这里没有什么特别的。
b(您再次定义一个函数并将其分配给myfunc
变量,只是这次它包含this
关键字,该关键字假设您正试图将此函数用作构造函数。在本例中,仅仅调用myfunc
不会产生任何输出,因为您还没有从函数返回任何内容。但是,使用前面的关键字new
调用函数将导致创建对象
var myObj = new myfunc();
// `this` keyword now refers to myObj which means myObj can call `function1`
- 示例:
a(右边是一个称为IIFE(或立即调用函数表达式(的东西。基本意思是,一个函数表达式被创建并立即执行。因此func
应该接收该函数返回的任何内容。
b(再一次,面对构造函数,只有这次您在执行myfunc
之前添加new
关键字时,才真正假设myfunc
是构造函数。创建newfunc
现在指向并拥有权限的对象
注意:在构造函数(使用new
关键字调用的函数(中,this
是隐式返回的,不需要显式返回。现在,如果你想测试它并返回其他东西,我会让你自己探索,看看你会得到什么。:(
由于这本身就是一个更广泛的话题,我推荐尼古拉斯·扎卡斯的这本优秀的书。它确实回答了很多JS问题。