我怎么知道我的班级是否有财产

时间:2019-05-29 20:15:15

标签: javascript jquery

朋友您好,我怎么知道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");
    }
}

谢谢

1 个答案:

答案 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的答案。