Javascript 如何检查类和函数是否存在?

Javascript 如何检查类和函数是否存在?,javascript,Javascript,当我运行这个程序时,我想得到类和函数都不存在的消息,但我得到的是w未定义的错误。我做错了什么?另外,我可以不使用eval来执行吗?查看JavaScript中函数是否存在的标准方法是测试它是否在当前范围内。因此有这样一个成语: var a, kdApi; a = (function() { function a() {} a.prototype.b = function() { return "foo"; }; return a; })(); kdApi = (functi

当我运行这个程序时,我想得到类和函数都不存在的消息,但我得到的是w未定义的错误。我做错了什么?另外,我可以不使用eval来执行吗?

查看JavaScript中函数是否存在的标准方法是测试它是否在当前范围内。因此有这样一个成语:

var a, kdApi;
a = (function() {
  function a() {}
  a.prototype.b = function() {
    return "foo";
  };
  return a;
})();
kdApi = (function() {
  function kdApi(className, funcName) {
    if (typeof [className] !== "undefined" && ([className] != null)) {
      eval("cu= new " + className + "()");
      if (cu[funcName]) {
        console.log("class and function exists");
      } else {
        console.log("class does, function doesn't");
      }
    } else {
      console.log("both class and function doesn't.");
    }
  }
  return kdApi;
})();
new kdApi("w", "b");

我相信有类似的东西,看看它是否是一个构造函数,但我不确定

查看JavaScript中是否存在函数的标准方法是测试它是否在当前范围内。因此有这样一个成语:

var a, kdApi;
a = (function() {
  function a() {}
  a.prototype.b = function() {
    return "foo";
  };
  return a;
})();
kdApi = (function() {
  function kdApi(className, funcName) {
    if (typeof [className] !== "undefined" && ([className] != null)) {
      eval("cu= new " + className + "()");
      if (cu[funcName]) {
        console.log("class and function exists");
      } else {
        console.log("class does, function doesn't");
      }
    } else {
      console.log("both class and function doesn't.");
    }
  }
  return kdApi;
})();
new kdApi("w", "b");
if (funcName) {
    funcName();
}
我相信有类似的东西,看看它是否是一个构造函数,但我不确定

vara,kdApi;
if (funcName) {
    funcName();
}
a=(函数(){ 函数a(){} a、 原型c=1; a、 prototype.b=函数(){ 返回“foo”; }; 返回a; })(); kdApi=(函数(){ 函数kdApi(类名称,函数名称){ if(className!=null&&className在窗口中){ 如果(funcName!=null&&funcName在窗口[className].prototype中&& 窗口的类型[className]。原型[funcName]=“函数”){ 编写(“存在类和函数”); }否则{ 编写(“类有,函数没有”); } }否则{ 编写(“类和函数都不使用”); } } 返回kdApi; })(); 函数testCF(clazz,func){ 编写(“测试“+clazz+”+func+”():”; 新kdApi(clazz,func); 文件。写(“
”); } 测试CF(“a”、“b”); 测试CF(“a”、“c”); 测试cf(“k”、“b”); 测试cf(“k”、“c”); testCF(空,“c”); testCF(“a”,空);
现场演示:

在Chrome 10.0.642.2 dev下测试; a=(函数(){ 函数a(){} a、 原型c=1; a、 prototype.b=函数(){ 返回“foo”; }; 返回a; })(); kdApi=(函数(){ 函数kdApi(类名称,函数名称){ if(className!=null&&className在窗口中){ 如果(funcName!=null&&funcName在窗口[className].prototype中&& 窗口的类型[className]。原型[funcName]=“函数”){ 编写(“存在类和函数”); }否则{ 编写(“类有,函数没有”); } }否则{ 编写(“类和函数都不使用”); } } 返回kdApi; })(); 函数testCF(clazz,func){ 编写(“测试“+clazz+”+func+”():”; 新kdApi(clazz,func); 文件。写(“
”); } 测试CF(“a”、“b”); 测试CF(“a”、“c”); 测试cf(“k”、“b”); 测试cf(“k”、“c”); testCF(空,“c”); testCF(“a”,空); 现场演示:


在Chrome 10.0.642.2 dev下测试

这非常接近,它只是假设类名附加到窗口,在我的例子中,它们不是。这是我的解决方案,它与eval一起工作,我想它是安全的:这非常接近,它只是假设类名附加到窗口,在我的例子中,它们不是。这是我的解决方案,它与eval一起工作,我想它是安全的: