【问题标题】:How can i know if my class has a property我怎么知道我的班级是否有财产
【发布时间】:2019-10-15 11:57:17
【问题描述】:

你好朋友,请问我如何知道类名名称是否包含属性 因为我使用的是 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");
    }
}

谢谢

【问题讨论】:

标签: javascript jquery


【解决方案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的答案。

【讨论】:

  • TypeError: window[data.className] 未定义
  • @AmineBouhaddi 是的,不幸的是我提出的解决方案实际上并没有奏效。我编辑了我的答案以反映这一点,并添加了一些应该可以工作的代码
  • 首先非常感谢您的努力和帮助,我想知道 eval 是否安全?
  • @AmineBouhaddi 我进一步解释了使用 eval 的安全问题
猜你喜欢
  • 2016-03-12
  • 2011-04-03
  • 2021-10-05
  • 2013-12-09
  • 1970-01-01
  • 2012-07-03
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多