繁体   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