说我有类似下面的对象:从内部函数获取对象键名称?
var obj = {};
obj.test = function() { console.log(?); }
反正有打印出“测试”,关键是这个函数的值,但事先不知道obj的名字?
说我有类似下面的对象:从内部函数获取对象键名称?
var obj = {};
obj.test = function() { console.log(?); }
反正有打印出“测试”,关键是这个函数的值,但事先不知道obj的名字?
试试这个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()
不是真的。 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();
同样的功能现在EXIS在同一个对象的三个不同属性上......并作为一个全局的对象。
可能是有点复杂的解决方案,但是这可能是有用的 -
您可以将在一个特定的键添加功能,你的对象的方法。使用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' }"
你可以调用的方法的名称与 arguments.callee.name
var a ={ runner_function : function(){ console.log(arguments.callee.name); } };
a.runner_function() //It will return "runner_function"
你为什么要这么做?函数只是一个值。它不知道它可能或不可能成为什么对象。它可能是对象上多个属性的值。 – 2017-05-05 05:10:52