今天,在我的脑海中工作时,在javascript中的某些时候是堆栈。
我想知道
之间的基本区别function FunctionName(){
//Code goes here;
}
和
var MyFuncCollection = new Object();
MyFuncCollection.FunctionName = function(){
//Code goes here;
}
两者都是一样的。那么之间有什么区别呢。使用具有对象名称的函数是否有任何优势?
我看过Question。但它使用变量并分配函数特定变量。我想在单个对象中创建对象并分配多个函数。
答案 0 :(得分:1)
第一个定义全局函数名称。如果您加载两个库,并且它们都尝试定义data.frame
,它们将相互冲突。你只会得到最后定义的那个。
第二个只有一个全局变量xor %eax, %eax
。所有函数都定义为该变量中的属性。因此,如果您有两个尝试定义相同函数名称的集合,一个将是FunctionName
,另一个将是MyFuncCollection
,并且不存在任何冲突。
唯一的冲突是两个集合都试图为集合本身使用相同的名称,这不太可能。但这并非完全闻所未闻:有一些库试图使用FuncCollection1.FunctionName
作为主要标识符。 jQuery是最突出的,它提供FuncCollection2.FunctionName
来删除它的$
绑定并恢复到以前的绑定。
答案 1 :(得分:1)
简短的回答是,对象上下文中的方法使用父对象上下文,而" global"函数有自己的对象上下文。
长答案涉及JavaScript的一般面向对象方法,尽管JavaScript中的所有内容都是一个对象,您也可以使用此方法创建数组。
我无法告诉你原因,但根据我的经验,最佳功能定义既不是最常见的,但是:
var myFunction = function(){};
可以为变量分配函数,甚至可以编写如下定义:
MyObject.myMethod = function(){};
为了进一步阅读,有各种在线教科书可以为您提供更多更深入的信息。
答案 2 :(得分:0)
我总能找到的一个主要优势是更清晰的代码,更少覆盖功能的机会。然而,它远不止于此。
您的范围完全在对象内部发生变化。请考虑以下代码::
功能:
function FunctionName(){
return this;
}
FunctionName()
返回:
Window {top: Window, location: Location, document: document, window: Window, external: Object…}
对象:
var MyFuncCollection = new Object();
MyFuncCollection.FunctionName = function(){
return this;
}
MyFuncCollection.FunctionName()
返回:
Object {}
这导致一些很好的菊花链功能,等等。
答案 3 :(得分:0)
第一个:
function functionName (){
//Code goes here;
}
是function declaration。它在其编写的上下文中定义了function
对象。
注意:此不必须是global
上下文,而doesn't
说任何 >关于调用它时this
内部的值。 More about scopes in JavaScript
第二个注释:most style guides个函数只有在声明为constructor时才会使用大写名称声明。< / p>
第二个:
var myFuncCollection = {};
myFuncCollection.functionName = function () {
//Code goes here;
};
通知:不要使用new Object()
语法,将new
与函数构造函数一起使用时,这被认为是不好的做法。改为使用文字形式(如上所述)。
将function expression简单分配给Object
的属性。
同样应该说明相同的通知:这对this
在调用时的价值没有任何说明。
JavaScript中的this
在调用function
对象时获得一个值,see here以获取详细信息。
当然,在function
上放置Object
有助于避免在同一个上下文中命名与其他变量/函数声明的冲突,但这可能是函数的本地上下文,而不一定是global
上下文。
除了这些差异之外,从语言的角度来看,使用一堆函数声明或带有一堆方法的Object没有任何区别。
从设计的角度来看,将方法放在Object
上允许您将逻辑分组和/或封装到应该包含它的特定对象。这是Object Oriented Programming范式含义的一部分。
当您希望导出或简单地将所有这些功能传递给另一个separate module时,这样做也很好。
关于它的问题(: