【问题标题】:How to get current property function's name - JavaScript如何获取当前属性函数的名称 - JavaScript
【发布时间】:2018-06-21 12:35:57
【问题描述】:

我有一个如下所示的对象。基本上它包含调用方法的属性。我希望能够做的是,而不是让 DEVELOPER 两次(一次用于属性名称,一次用于参数值),我想获取被调用的当前属性以获取它。

此外,我不想在初始调用中将“DEVELOPER”作为参数传递,因为我希望智能感知来获取它。

return {
   DEVELOPER: function ()
            {
                return getEmailRecipients("DEVELOPER")
            }
}
 //it get's called like this.
 emailGroups.DEVELOPER();

基本上我想做类似的事情

return {
   DEVELOPER: function ()
            {
                return getEmailRecipients({this.currentPropName}) //Which would equal DEVELOPER.
            }
}

如果有更好的方法可以做到这一点,我会全力以赴。

提前致谢!

【问题讨论】:

  • 这对我来说更有意义:return { getMail: function (who) { return getEmailRecipients(who) } } 并像 emailGroups.getMail("DEVELOPER"); 一样称呼它——智能感知做了什么让它变得聪明?
  • 我只希望开发此功能的任何人,包括我自己,都只有一个精选的电子邮件组预设可供选择。如果它是基于参数/文本的,则会发生用户错误。如果它是一个只允许他们选择预定义组的列表,那么它将防止人为错误。至少不会在没有意识到的情况下被忽视和部署。

标签: javascript function object ecmascript-5


【解决方案1】:

据我所知,这是不可能的,或者至少它不是内置的。

您可以像这样使用arguments.callee 中定义的函数name...

arguments.callee.name

但是函数的name属性没有得到很好的支持。

你可以试试这样的...

this.toSource().match(/\{(.*?):/)[1].trim ()

但这仅适用于对象中的一项,并且仅适用于第一项。

您也可以尝试将返回的对象定义为变量,然后遍历该对象,为每个项目提供一个包含项目名称的新属性。

就这样……

// Object to return to emailGroups
var data = {
    DEVELOPER: function ()
    {
        return getEmailRecipients (arguments.callee.givenName)
    }
}

// Give each object item a new property containing the name
for (var name in data) {
    if (data.hasOwnProperty (name) === true) {
        data[name].givenName = name;
    }
}

// Return data variable as emailGroups
return data;

【讨论】:

  • 所以 arguments.callee.name 有效!我对使用它的犹豫是你说名字没有得到很好的支持。你知道什么不支持 name 属性吗?
  • 男人!它不起作用,即在 chrome 中工作,但遗憾的是,它是不行的。
  • @Godrules500 是的,IE 不支持 name 属性,如果您使用 5-10 年前的 Chrome 或 Firefox,他们可能也不支持它。所以你的下一个最佳选择是我提到的第三个解决方案,手动给函数一个 name 属性。
猜你喜欢
  • 1970-01-01
  • 2014-01-15
  • 2010-11-15
  • 1970-01-01
  • 2012-04-25
  • 2011-04-17
  • 2011-06-11
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多