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