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.xml 中的所有命名空间。如果选择的名称存在,则返回对象。

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);
}

之后,我在 namespace 中添加了一个计时器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 回答