从内部函数获取对象键名?

时间:2017-05-04 14:23:37

标签: javascript

说我有一个像下面这样的对象:

var obj = {};
obj.test = function() { console.log(?); }

无论如何打印出" test",这个函数值的关键,但不提前知道obj名称?

4 个答案:

答案 0 :(得分:0)

不是真的。 JS中的关系是单向的。

您可以搜索匹配...

var obj = {};
obj.not = 1;
obj.test = function() {
  var me = arguments.callee;
  Object.keys(obj).forEach(function(prop) {
    if (obj[prop] === me) {
      console.log(prop);
    }
  });
};

obj.test();

但是看看这个:

var obj = {};
obj.not = 1;
obj.test = function() {
  var me = arguments.callee;
  Object.keys(obj).forEach(function(prop) {
    if (obj[prop] === me) {
      console.log(prop);
    }
  });
};
obj.test2 = obj.test;
obj.test3 = obj.test;
window.foo = obj.test;

obj.test();

同一个函数现在存在于同一个对象的三个不同属性中......并且作为一个全局。

答案 1 :(得分:0)

可能是一个复杂的解决方案,但这可能有用 -

您可以使用一种方法将特定键的对象添加到对象中。使用bind方法,我们可以预定义函数的第一个参数作为用于添加它的键。 我添加到键中的函数是_template,它的第一个参数将始终是它被添加到的键。

var obj = {};
    
function addKey(key) {
  obj[key] = _template.bind(null, key)
}
    
function _template(key, _params) {
  console.log('Key is', key);
  console.log('Params are',_params);
}


addKey('foo')
obj.foo({ some: 'data' }) // this will print "foo { some: 'data' }"

参考 - Function.prototype.bind()

答案 2 :(得分:-1)

试试这个Object.keys(this)arguments.callee

var obj = {};
obj.test = function() {
  var o = arguments.callee;
 Object.values(this).map((a,b)=>{
   if(a==o){
   console.log(Object.keys(this)[b])
   }
  })
}
obj.one = "hi"

obj.test()

答案 3 :(得分:-1)

您可以获取调用方法的名称 的 arguments.callee.name

var a ={ runner_function : function(){ console.log(arguments.callee.name ); } };

a.runner_function() //It will return "runner_function"