确定匿名函数的属性名称
Determine the property name of an anonymous function
是否可以确定函数中匿名函数的属性名称? 例如。。。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Testing</title>
<script type="text/javascript">
var $={};
$.fn={};
$.fn.somePropertyName = function() {
console.log(this); // Object { somePropertyName=function()}
//How do I get "somePropertyName" here?
};
$.fn.somePropertyName()
</script>
</head>
<body></body>
</html>
我的目的是在创建jQuery插件时不需要输入两次"myPluginName"。 不是我懒惰,而是不想有机会有所作为。
$.fn.myPluginName= function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || ! method) {
return methods.init.apply(this, arguments);
} else {
// Somehow get the property name "myPluginName" here.
$.error('Method ' + method + ' does not exist on jQuery.myPluginName');
}
};
您可以编写一个例程,该例程在对象上查找特定函数,并返回属性键:
function find_fn(obj, fn) {
let (var i in obj) if (obj[i] === fn) return i;
}
function name(fn) {
return find_fn($.fn, fn);
}
现在使用将函数绑定到自身的技巧,因此函数可以使用this
从自身内部引用自身:
$.fn.foo = function() { console.log('my name is', name(this); }
$.fn.foo = $.fn.foo.bind($.fn.foo);
$.fn.foo();
但是,简单地执行以下操作可能更容易:
const FUNCNAME = 'somePropertyName';
$.fn[FUNCNAME] = function() {
console.log("I am", FUNCNAME);
};
如果你现在输入错误 FUNCNAME,你会得到一个 ReferenceError 或其他东西。
相关文章:
- 如何使对象属性函数成为事件发射器
- 属性函数的 JavaScript 初始值
- 类型错误: 无法设置未定义的属性<函数>
- Javascript set 属性函数不起作用
- 在循环中运行对象属性函数
- 为什么在枚举属性/函数时键长度不准确
- 主干模型获取属性函数返回上次更新的值
- 使用 Jquery 和对象属性函数时出现类型错误
- Javascript:属性函数中的引用
- 导出的目的是什么属性函数在挖空.js库中
- 检查全局属性/函数是否已在 JavaScript 中被覆盖
- 误解了输入文本值属性函数的正确使用
- 将onClick函数绑定到选项卡的href属性函数
- 当函数的属性函数被调用时,是否可以修改函数本身
- 命名对象属性函数
- Javascript -为什么要循环?(原型属性->构造函数属性->函数对象->构造函数属性)
- 如何从属性函数中引用上面的对象
- Javascript继承:子类型原型不能访问超类型的属性/函数
- 破坏性映射对象属性函数
- React.js:如何定义默认属性函数