JavaScript中的立即调用函数

wn9m85ua  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(141)

我有一个关于在JavaScript中使用立即调用函数(IIF)的澄清。我下载了一个名为test的JavaScript文件。js如下,我在Google搜索IIF后有以下问题:

define(function () {

   (function (window) {

    this.test = function() {};
    
   Test.prototype.function1 = function(){
    //Do something
   },
   
   function Delete(){
   //Code to Delete
   }
   window.Delete = Delete;

   })(window);
});

我确实有以下问题:
1.行this.test = function() {};是构造函数吗?如果是这样,我可以在一个文件中有两个构造函数,例如:

this.test = function() {};
 this.test2 = function() {};

而且,当我知道这是一个自动调用的文件,所有的东西都在最初执行时,为什么还要使用构造函数呢?
1.这是私人聚会吗

Test.prototype.function1 = function(){
   //Do something
 },

这不是自动的吗?我是否需要创建一个测试对象然后调用它?
1.这是公共功能吗?

function Delete(){
     //Code to Delete
 }
 window.Delete = Delete;

上面的最后一行是这么说的。如果是这样,那么第一个和第二个功能有什么区别?
1.关键字window是什么?

sxpgvts3

sxpgvts31#

值得注意的是,这段代码将失败并返回一个错误,因为Test是未定义的,并且您不能在undefined上设置prototype属性。
1.在JavaScript中,任何函数都可以是构造函数。这取决于你如何使用它。您可以将函数和属性添加到任何函数的.prototype属性中,并且使用new从它创建的任何对象都将从原型链中获取它们。在你的例子中,this.test = function(){}看起来不像原型。
1.在JavaScript中没有“public”或“private”函数,只有通过return从函数中暴露出来的内容(或者在您的情况下,通过使用全局window对象,这被认为是不好的做法)如果Test函数在某个地方暴露,那么Test.prototype.function1也会暴露。所有的原型方法都是“公共的”。
1.是的,算是吧。就像我说的,“public”或“private”在JavaScript中是不存在的。您创建了一个函数并将其放置在window对象上,该对象是全局对象。从本质上讲,您已经使该函数成为全局函数。

  1. window是全局浏览器对象。虽然当像这样使用(function(window) { ... })(window)时,第一个窗口是参数的名称,(以及函数引用该参数的window的任何示例,第二个窗口(传递给函数调用)是全局window对象。
    进一步阅读:

*The Revealing Module Pattern

相关问题