Javascript 我怎么知道我的类是否有属性
你好,朋友们,请问我如何知道类名是否包含属性 因为我使用的是Ajax,我收到的类名是data.className 这是我的代码:Javascript 我怎么知道我的类是否有属性,javascript,jquery,Javascript,Jquery,你好,朋友们,请问我如何知道类名是否包含属性 因为我使用的是Ajax,我收到的类名是data.className 这是我的代码: $.post(action, object, function(data){ if(data.className.prototype.hasOwnProperty(data.methodName)) console.log("the property exists") return data; }, 'json'); 我的目标:
$.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");
}
}
谢谢您的代码的问题在这一部分:
data.className.prototype
。由于data.className==“Quote”
,这相当于“Quote”.prototype
,它将获得字符串的原型,而不是Quote
类的原型。因此,您希望将字符串“Quote”
转换为名为Quote
的类。在Javascript中可以访问由字符串命名的变量,这一点可以找到。不幸的是,这不适用于类,唯一的修复方法似乎是使用eval
。生成的代码如下所示:
var proto=eval(data.className+“.prototype”);
if(proto.hasOwnProperty(data.methodName))
log(“属性存在”)
使用eval
时应小心,因为这可能会导致安全问题eval
执行作为参数传递的字符串中的任何代码。如果您确信data.className
是有效标识符,那么这不是问题。如果没有,则应首先检查data.className
是否为有效的JavaScript标识符。要了解如何做到这一点,您可以查看的答案。TypeError:window[data.className]是undefined@AmineBouhaddi是的,不幸的是,我提出的解决方案实际上不起作用。我编辑了我的答案以反映这一点,并添加了一些应该可以工作的代码。首先,我非常感谢您的努力和帮助,我只想知道eval是否安全?基本上不是:@AmineBouhaddi我解释了使用eval的安全问题。这里有一个可能的解决方案不涉及eval。您可以将这些类放入映射中,并使用映射按名称引用对象。