[英]Difference between a JavaScript Function() and a JavaScript object
我试图理解JavaScript中的一些让我感到困惑的东西。
假设我想在JavaScript中创建一个方法Guard.ThrowError()
,我有两种方法:
使用对象:
这基本上就是我在网上找到的方法。
var Guard2 = { ThrowIfNull: function() { throw new Error('sdmflsfk'); } };
使用功能:
当您在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.