[英]Getting Object Key Name from inside function?
说我有一个如下对象:
var obj = {};
obj.test = function() { console.log(?); }
无论如何有没有打印出“测试”这个函数是值的键,但事先不知道obj名称?
并不是的。 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();
现在,相同的函数存在于同一对象的三个不同属性上……并作为一个全局对象存在。
可能有些复杂的解决方案,但这可能很有用-
您可以使用一种方法,通过特定的键将函数添加到对象。 使用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' }"
试试这个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()
您可以获取使用arguments.callee.name调用的方法的名称
var a ={ runner_function : function(){ console.log(arguments.callee.name ); } }; a.runner_function() //It will return "runner_function"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.