如何访问当前元素 属性 被调用函数的名称
How to access the current element property name of the called function
出于记录目的,我为元素函数属性创建了一个包装函数。
包装函数在上面:
functionsWrapper: function () {
for (i = 0, args = new Array(arguments.length); i < arguments.length; i++) {
args[i] = arguments[i];
}
console.log('call for ' + arguments.callee.name + ' with params ' + argumantsLog(args));
return this['original' + arguments.callee.name].apply(this, args);
}
然后我使用这段代码来包装元素函数:
logFunctionsCalls: function (element) {
if (!element)
return;
if (element.children && element.children.length)
for (var i = 0; i < element.children.length; i++)
logFunctionsCalls(element.children[i]);
if (!element.functionsLogged) {
element.functionsLogged = true;
for (var property in element) {
if (typeof element[property] != 'function')
continue;
element['original' + property] = element[property];
element[property] = functionsWrapper;
}
}
}
我的问题是 arguments.callee
包含 functionsWrapper
代码但没有 属性 被调用函数的名称。
您不能在任何地方都使用相同的 functionWrapper
- 无法找出它被调用的 属性。相反,创建了不同的包装器并将原始包装器保持在关闭状态。
for (var p in element) (function(property) {
if (typeof element[property] != 'function')
return;
var original = element[property];
element[property] = function wrapped() {
console.log('call for ' + property + ' with params ' + Array.prototype.join.call(arguments));
return original.apply(this, arguments);
};
}(p));
出于记录目的,我为元素函数属性创建了一个包装函数。 包装函数在上面:
functionsWrapper: function () {
for (i = 0, args = new Array(arguments.length); i < arguments.length; i++) {
args[i] = arguments[i];
}
console.log('call for ' + arguments.callee.name + ' with params ' + argumantsLog(args));
return this['original' + arguments.callee.name].apply(this, args);
}
然后我使用这段代码来包装元素函数:
logFunctionsCalls: function (element) {
if (!element)
return;
if (element.children && element.children.length)
for (var i = 0; i < element.children.length; i++)
logFunctionsCalls(element.children[i]);
if (!element.functionsLogged) {
element.functionsLogged = true;
for (var property in element) {
if (typeof element[property] != 'function')
continue;
element['original' + property] = element[property];
element[property] = functionsWrapper;
}
}
}
我的问题是 arguments.callee
包含 functionsWrapper
代码但没有 属性 被调用函数的名称。
您不能在任何地方都使用相同的 functionWrapper
- 无法找出它被调用的 属性。相反,创建了不同的包装器并将原始包装器保持在关闭状态。
for (var p in element) (function(property) {
if (typeof element[property] != 'function')
return;
var original = element[property];
element[property] = function wrapped() {
console.log('call for ' + property + ' with params ' + Array.prototype.join.call(arguments));
return original.apply(this, arguments);
};
}(p));