如何在Javascript中“新”返回一个函数

时间:2013-01-25 03:29:08

标签: javascript function

我正在尝试在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功能不起作用?

1 个答案:

答案 0 :(得分:1)

尝试var timer = new ($("timer"))();

你的问题不明确,但我想,因为$("timer")返回一个函数,你想要一个$("timer")结果的新实例,而不是$()的新实例。