在JavaScript静态实例上使用构造函数

Using a constructor on a JavaScript static instance

本文关键字:构造函数 实例 JavaScript 静态      更新时间:2023-09-26

我正在编写一个JavaScript库,其中我想要一些方法和属性公共和其他私有。下面的代码看起来是一个很好的方法,同时把所有内容都包装到一个对象中。

(function (window) {
   var Thing = function() {
      // private var
      var variable = "value";
      return {
         // public method
         method:function() {
            alert(variable);
         }
      }
   }();
   window.Thing = Thing;
})(window);
Thing.method();

这很好。(大部分是从这里抓取的)。

然而,我仍然希望能够使用Thing的构造函数来传递一些参数。

我是否可以在返回语句中提供构造函数,或者使用prototype来覆盖构造函数?所以我可以调用:

Thing(stuff);

现在,如果我尝试,它会导致:

Uncaught TypeError: Property 'Thing' of object [object DOMWindow] is not a function

这是有意义的,因为它不返回自己,但理想情况下,可以调用构造函数。

或者,这是不是太糟糕了,我应该避开一些或所有这些?

要完成您的要求,请这样做:

(function (window) {
   var thingMaker= function(stuff) {
      // private var
      var variable = "value";
      return {
         // public method
         method:function() {
            alert(variable);
         }
         alertStuff:function() {
            alert(stuff);
         }
      }
   };
   window.thingMaker= thingMaker;
})(window);
var myThing = window.thingMaker(stuff);
myThing.alertStuff()

更多信息可以通过搜索谷歌搜索道格拉斯·克罗克福德。你可以在yui剧院看到他制作的一些很棒的视频。但是我不得不问,既然已经有这么多优秀的框架(jquery,prototype,yui,dojo等等),为什么还要创建另一个框架呢?

Thing已经创建,所以您总是会太晚调用'构造函数'。

你可以像这样传递变量:

(function (window, var1, var2) {
  var Thing = function() {
  // private var
  var variable = "value";
  return {
     // public method
     method:function() {
        alert(variable);
     }
  }
}();
window.Thing = Thing;
})(window, var1, var2);

ThingObject,有一个方法叫做method:

  {
     // public method
     method:function() {
        alert(variable);
     }
  }
Thing.method(); // alerts "value"

你可以返回:

function () {
    alert(arguments)
}
然后

Thing(6,5,4); // alerts 6,5,4