立即在javascript中调用函数

时间:2015-12-21 11:24:14

标签: javascript javascript-events

我在javascript中使用IIF有一个澄清。 我已经下载了一个名为test.js的javascript文件,如下所示,我在谷歌搜索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() {};构造函数? 如果是这样,我可以在一个文件中有2个构造函数,例如:

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

    而且,当我知道这是一个自动调用的文件,其中所有内容最初都会被执行时,为什么我需要一个构造函数。

  2. 这是私人功能吗?

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

    这不会自动生效吗?我是否需要创建测试对象然后调用它?

  3. 这是公共职能吗?

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

    上面的最后一行说明了这一点。如果是这样,那么第一和第二函数之间的区别是什么?

  4. 这里的关键字window是什么?

1 个答案:

答案 0 :(得分:4)

值得注意的是,此代码会因错误而失败,因为Test未定义,并且您无法在prototype上设置undefined属性。

  1. 在JavaScript中,任何函数都可以是构造函数。这取决于你如何使用它。您可以向任何函数的.prototype属性添加函数和属性,使用new从它创建的任何对象都将从原型链中获取它们。在您的情况下,this.test = function(){}看起来不像原型。
  2. 在JavaScript中没有“公共”或“私有”功能,只有通过return从函数中公开的内容(或者在您的情况下,通过使用全局window对象,这被认为是不好的做法)如果Test函数在某处暴露,那么Test.prototype.function1也会暴露出来。所有原型方法都是“公开的”。
  3. 是的,有点儿。就像我说的,“公共”或“私人”不是JavaScript中的东西。您创建了一个函数并将其放在window对象上,该对象是全局的。从本质上讲,你已经使这个功能成为全球性的。
  4. window是全局浏览器对象。虽然当像(function(window) { ... })(window)一样使用时,第一个窗口是参数的名称,(以及函数引用中window的任何实例引用该参数,第二个窗口(传递给函数调用) ,是全局window对象。
  5. 进一步阅读: