0

Javascriptで名前空間機能をシミュレートしようとしています。

var com                   = {};
com.domain                = {};
com.domain.system         = {};
com.domain.net            = {};
com.domain.net.ip         = {};
com.domain.net.ip.tcp     = {};
com.domain.net.ip.udp     = {};
com.domain.net.ip.ssl     = {};
com.domain.util           = {};
com.domain.util.timer     = {};
com.domain.plugins        = {};
com.domain.session        = {};
com.domain.io             = {};
com.domain.algorithm      = {};
com.domain.debug          = {};

これは名前空間の宣言です。後で、これらの名前空間に関数を追加します。

これは私のセレクター関数です:

名前空間を使用する便利な方法として、$という名前の関数を追加します。この関数は、com内のすべての名前空間をウォークします。選択した名前が存在する場合は、オブジェクトを返します。

function $ (selector) {
  function digger (namespace, selector) {
    for (var prop in namespace) {
      if (typeof namespace[prop] == "array" || typeof namespace[prop] == "object") {
        if (prop == selector) {
          return namespace[prop];
        }
        var dig = digger(namespace[prop], selector);
        if (dig != null) {
          return dig;
        }
      } else {
        if (prop == selector) {
          return namespace[prop];
        }
      }
    }
  }
  return digger (com, selector);
}

その後、名前空間にタイマーを追加しますcom.doamin.util

com.domain.util.timer = function () {
    this._handle = new InnerObj.SystemTimer(io);
    return this;
};

com.domain.util.timer.prototype.expiresFromNow = function (seconds, cbHandler) { 
    this._handle.ExpiresFromNow (seconds, cbHandler);
};

com.domain.util.timer.prototype.wait = function (seconds, cbHandler) { 
    this._handle.Wait (seconds, cbHandler);
};

com.domain.util.timer.prototype.expiresAt = function (seconds, cbHandler) { 
    this._handle.Wait (seconds, cbHandler);
};

com.domain.util.timer.prototype.cancel = function () {
    this._handle.Cancel ();    
};

使用法:

 1. var timer = new com.domain.util.timer ();            OK
    timer.expiresAt (1, {});                             OK
 2. var func = $("timer");                               OK 
    var timer =  new func ();                            OK 
    timer.expiresAt (1, {});                             OK

しかししかししかししかししかし

var timer = new $("timer") ();                           NG

最後の機能が機能しない理由を誰かに教えてもらえますnewか?

4

1 に答える 1

1

試してみてくださいvar timer = new ($("timer"))();

あなたの質問は明確ではありませんが$("timer")、関数を返すので$("timer")、$()の新しいインスタンスではなく、結果の新しいインスタンスが必要だと思います。

于 2013-01-25T03:53:42.037 に答える