朋友您好,我怎么知道className名称是否包含属性 因为我使用的是 Ajax ,并且我收到的类名称为 data.className
这是我的代码:
$.post(action, object, function(data){
if(data.className.prototype.hasOwnProperty(data.methodName))
console.log("the property exists")
return data;
}, 'json');
我的对象:
{"className":"Quote", "methodName":"deleteQuote"}
这是我的班级报价
class Quote{
deleteQuote(callback){
console.log("hello world");
}
}
谢谢
答案 0 :(得分:1)
您的代码存在以下问题:data.className.prototype
。从data.className == "Quote"
开始,它等效于"Quote".prototype
,它将获得String
类而不是Quote
类的原型。因此,您想将字符串"Quote"
转换为恰好名为Quote
的类。可以在Javascript中访问由字符串命名的变量,如here所示。不幸的是,这不适用于类,唯一的解决方法似乎是使用eval
。结果代码如下:
var proto = eval(data.className+".prototype");
if(proto.hasOwnProperty(data.methodName))
console.log("the property exists")
使用eval
时应小心,因为它可能会导致安全问题。 eval
执行作为参数传递的字符串中的任何代码。如果您确定data.className
是有效的标识符,那么这不是问题。如果不是这样,则应首先检查data.className
是有效的JavaScript标识符。有关如何执行此操作的方法,请查看this question的答案。