簡體   English   中英

JavaScript Function()和JavaScript對象之間的區別

[英]Difference between a JavaScript Function() and a JavaScript object

我試圖理解JavaScript中的一些讓我感到困惑的東西。

假設我想在JavaScript中創建一個方法Guard.ThrowError() ,我有兩種方法:

  1. 使用對象:

    這基本上就是我在網上找到的方法。

     var Guard2 = { ThrowIfNull: function() { throw new Error('sdmflsfk'); } }; 
  2. 使用功能:

    當您在TypeScript中創建一個類“Guard”並讓它編譯為JavaScript時,您會得到如下內容:

     var Guard = (function() { function Guard() { } Guard.ThrowIfNull = function () { throw new Error('sdmflsfk'); }; return Guard; })(); 

可以使用Guard.ThrowIfNull()調用這兩個函數。 我想知道有什么區別,什么時候選擇我選擇方法1而不是方法2?

感謝您的寶貴意見。

親切的問候

我想知道有什么區別,什么時候選擇我選擇方法1而不是方法2?

唯一的區別是Guard是第二個示例中的一個函數,而不是第一個函數。 所以可以調用第二個(在那個代碼中它實際上沒有任何事情,但可以調用它); 第一個不能。

函數是JavaScript中的對象,正確的實際對象,因此與所有其他對象一樣,它們可以像ThrowIfNull一樣添加其他屬性。

jQuery是一個廣泛使用的例子:主要功能, jQuery (aka $ )用於其功能:

$("#foo").on("click", function() { /*...*/ });

...以及它的對象,因為它具有與Guard完成的各種屬性:

$.ajax(/*...*/);

兩種方法都有效,因為javascript中的函數也是一個對象。 唯一的區別是你可以調用函數myFunction(); 你不能用一個對象來做。

函數方法用於在JS中創建類。 使用此方法,您可以擁有私有和公共屬性。 這在對象方法中無法實現。 所有屬性都是公共的。

示例示例

 function testClass(){ // Private member var a = "abc"; var b = "test"; function print(){ console.log(a,b); } return { print: print } } testClass().print(); // testClass().a This will throw error 

Guard2 - 您的方法1 - 在某種程度上是對象的“靜態”定義。 您無法實例化該類型的另一個對象。

Guard - 你的方法2 - 是混合的:它是一個'自動類' Guard的定義,它被實例化。 結果幾乎相同,因為您也無法從中實例化新對象。

通常,你會這樣做:

var Guard = function() {

  function Guard() { };

  Guard.ThrowIfNull = function () {
    throw new Error('sdmflsfk');
  }; 

};

var myGuard = new Guard();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM