说我有一个像下面这样的对象:
var obj = {};
obj.test = function() { console.log(?); }
无论如何打印出" test",这个函数值的关键,但不提前知道obj名称?
答案 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' }"
答案 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"