函数FunctionName(){}和object.FunctionName = function(){}之间有什么区别

时间:2015-09-26 10:06:57

标签: javascript jquery object

今天,在我的脑海中工作时,在javascript中的某些时候是堆栈。

我想知道

之间的基本区别
function FunctionName(){
    //Code goes here;
}

var MyFuncCollection = new Object(); 

MyFuncCollection.FunctionName = function(){
    //Code goes here;
}

两者都是一样的。那么之间有什么区别呢。使用具有对象名称的函数是否有任何优势?

我看过Question。但它使用变量并分配函数特定变量。我想在单个对象中创建对象并分配多个函数。

4 个答案:

答案 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时,这样做也很好。

关于它的问题(: