所以:
var obj = {
'key': function() {
// get 'key' here
}
};
obj.key();
例子:
http://plnkr.co/edit/tsUz6WY1qIvuoie3qSUv?p=preview
var logger = {
'warn': function(msg) {
var logLvl = 'warn'; // <-- want to get the string 'warn' right here
console.log('[', logLvl, ']', msg);
}
};
logger.warn('Computer is exploding.'); // => [ warn ] Computer is exploding.
我只能想到使用命名函数并按函数this
值搜索的复杂方法:
http://plnkr.co/edit/IHu087timHZCA2EbjDUa?p=preview
var logger = {
'warn': function func(msg) {
console.log('[', _.invert(this)[func], ']', msg);
}
};
logger.warn('Computer is exploding.');
是否有捷径可寻?
更新:所以这里有更多关于我为什么问的细节。
这是一个Angular应用程序。这是预设列表。预设有一个名称和两个数字:https : //github.com/Wideshanks/breatherBar/blob/rmUI/app.js#L372
这些在前端显示为列表项:https : //github.com/Wideshanks/breatherBar/blob/rmUI/index.html#L42
当有人单击列表项时,我想向列表添加一个新的默认模式,并将名称/两个数字设置为预设中的名称。
预设是添加新样式的功能。这两个数字是在函数体内定义的,但预设的名称在函数外部:这是$ scope.presets中的属性名称:https : //github.com/Wideshanks/breatherBar/blob/rmUI/app.js #L359
大概只需要重新考虑整个事情,因为我的工作方式最终变得令人费解。
您可以装配如下所示的内容:
var logLevels = [ "trace", "debug", "info", "warn", "error" ];
var logger = logLevels.reduce(function(logger, level) {
logger[level] = function(msg) {
console.log("[" + level + "] " + msg);
};
return logger;
}, {});
这遍历了(当然是虚构的)日志级别列表,为每个级别添加了一个功能。该函数依赖于围绕.reduce()
回调创建的闭包。每个函数的行为均取决于logger
与其关联的属性,但并不是本质上以这种方式绑定在一起。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句