【问题标题】:Get the key of an object from within the object从对象内部获取对象的键
【发布时间】:2015-09-05 03:22:13
【问题描述】:

我有一个像这样的对象,它是键=>函数对的集合。

 var hashes = {
    "a": function () {
        console.log($(this));
    return 'Fanta';
  },
  'b': function () {
        console.log($(this));
    return 'Pepsi';
  },
  'c': function () {
        console.log($(this));
    return 'Lemonade';
  }
};

hashes["a"]();
hashes["b"]();

我想从函数中获取键的名称,即我希望 console.log($(this)) 返回“a”作为第一个函数,“b”作为第二个函数等等。但是由于 hashes 正在调用该函数,因此它返回 hashes 对象。

有没有办法从函数中获取对象的键(我只需要与被调用函数对应的键)

【问题讨论】:

  • 不能把key传给函数?
  • @limelights: 你的意思是像: hashes["a"]("a");我可以做到,但我想知道是否有办法在不传递价值的情况下做到这一点。
  • 我没有办法知道。该函数实际上并不属于hashes 对象或单个键,而是该对象属性包含对该函数的引用。您可以对不属于该对象的函数有其他引用,例如,var x = hashes.a; x();。 (返回 'Fanta')如果您给函数名称以匹配键,您可以尝试 arguments.callee.name,但这已被弃用,并且在严格模式下不起作用。
  • @nnnnnn:感谢您的回复。我明白了。但是,我会等着看是否有任何解决方案。我用它作为 switch case 的替代方法

标签: javascript object


【解决方案1】:

这是一种方法:

var hashes = {
  'a': 'Fanta',
  'b': 'Pepsi',
  'c': 'Lemonade'
};

var logger = function( key, value ) {
  console.log( key );
  return value;
};

for ( var key in hashes ) {
  if ( hashes.hasOwnProperty( key ) ) {
    var value = hashes[ key ];
    hashes[ key ] = logger.bind( null, key, value );
  }
}

hashes.a(); // "a"
hashes.b(); // "b"
hashes.c(); // "c"

Demo on JSBin

【讨论】:

  • 哦,等等..我现在得到你的代码。似乎您正在使用 2 个变量来实现这一点..但这会起作用...
  • 更新了代码以使用一个hashes 变量而不是两个。还删除了对词法 this 的依赖。
猜你喜欢
  • 2013-05-11
  • 1970-01-01
  • 2010-12-21
  • 2012-10-17
  • 2017-08-13
  • 2021-08-09
  • 1970-01-01
  • 2017-11-20
相关资源
最近更新 更多