說我有類似下面的對象:從內部函數獲取對象鍵名稱?
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