[英]How can I get a property name inside the property itself in Javascript?
[英]If a Javascript object has a property which holds a reference to a function, can I get that property name from within the function itself?
所以:
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
屬性運行,但它本身並不是這樣綁定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.