fre*_*rik 6 javascript function
我正在尝试用 JavaScript 编写一个辅助方法。如果发送函数或对函数的引用,它的行为应该有所不同。
我想像这样使用它:
helper('div', function () { return false; })
helper('div', obj.fn)
Run Code Online (Sandbox Code Playgroud)
我不明白的是:如何在辅助函数内部区分两者之间的区别?
我认为这是因为 JavaScript 在发送 obj.fn 之前首先评估它。我发现的唯一解决方法是将 obj.fn 作为 obj 发送,即
helper('div', { fn: obj.fn })
Run Code Online (Sandbox Code Playgroud)
然后我可以用 typeof 来区分两者之间的区别。但我真的很喜欢某种无需额外对象声明的方法。
您可以使用它toString()
来查明函数是否是匿名的,假设它被声明为命名函数而不是分配给变量的未命名函数:
function jim () { var h = "hello"; }
function jeff(func)
{
var fName;
var inFunc = func.toString();
var rExp = /^function ([^\s]+) \(\)/;
if (fName = inFunc.match(rExp))
fName = fName[1];
alert(fName);
}
Run Code Online (Sandbox Code Playgroud)
如果有的话,会给你函数的名称。
jeff(function () { blah(); }); // alert: null;
jeff(function joe () { blah(); }); // alert: "joe";
jeff(jack); // "jack" if jack is function jack () { }, null if jack = function() {}
Run Code Online (Sandbox Code Playgroud)
我之前的编辑提到了其他浏览器中不存在的 IE 怪癖,并且从版本 9 开始在 IE 中不再有效。但是,您仍然可以使用命名函数表达式将命名函数分配为对象属性:
var obj = {
fn: function namedFunction () { }
};
Run Code Online (Sandbox Code Playgroud)
这适用于所有浏览器,但 IE 8 及更低版本不遵守该规范,该规范规定该函数只能在其自己的块内通过该名称使用。
归档时间: |
|
查看次数: |
4188 次 |
最近记录: |