获取另一个函数中的函数参数
Getting function arguments within another function
我听说可以做这样的事情
this[func].apply(this, Array.prototype.slice.call(arguments, 1));
但是要访问arguments
对象,我需要在该函数中。
那么,例如,如果我在函数function1
中运行代码,有没有办法获取不同函数function2
的参数?
整个问题是我想向任何给定元素添加事件。但此元素可能已经附加了另一个事件。因此,例如,如果我将"onclick"事件附加到元素,我会执行以下操作:
var event = 'onclick';
if(typeof currentElement[event] === 'function'){
cf = currentElement[event];
f = function(){
cf();
func();
}
}else f = func;
currentElement[event] = f;
现在,正在调用两个函数,即新函数和上一个函数。问题是传递给前一个函数的参数在此方法中丢失了。
有谁知道当我们像我的例子中那样动态调用函数时是否有可能不丢失参数?
OBS:jQuery不是一个选项:/
听起来使用 addEventListener 会更适合你。 它允许您将多个侦听器(函数)附加到单个元素:
elem.addEventListener("click", function() {
console.log("click listener 1");
});
elem.addEventListener("click", function() {
console.log("click listener 2");
});
请注意,根据 MDN 的说法,IE>= 9 支持addEventListener
。
如果你确实想继续走你目前的道路,你可以做:
f = function(){
cf.apply(this, arguments);
func.apply(this, arguments);
}
对于您的特定情况,没有必要弄清楚将哪些参数传递给函数,因为您知道它是什么 - 除(旧)IE 之外的所有浏览器中的事件对象,其中没有任何内容(未定义)。
所以代码可以简单地是:
var event = 'onclick';
if(typeof currentElement[event] === 'function'){
cf = currentElement[event];
f = function(e){
cf(e);
func(e);
}
} else f = func;
currentElement[event] = f;
如果可能,请使用 addEventListner 和 attachEvent 作为回退,以便与可能在页面上运行的其他脚本很好地配合使用。
其他讨论:
通常,永远没有必要弄清楚传递给回调函数的内容,因为这甚至没有意义。程序员无法确定要传递给回调的内容,而是事件发射器决定传递的内容。在本例中,它是事件对象,但这是一般规则。
例如,假设我们有一个 API 来查询我们的数据库并返回一些数据:
function my_api (query) {}; // returns an object where a callback may
// be attached to the oncomplete property
API 文档提到:
my_api() 返回一个 API 对象。
API 对象 - 有一个属性 - oncomplete,其中可以附加回调以处理从 api 调用返回的数据。回调将使用一个参数调用 - 如果发生错误,则返回数据或无参数(未定义)。
还行。所以我们这样使用它:
var db = my_api('get something');
db.oncomplete = function (data) {alert(data)};
现在,如果我们想将该 oncomplete 事件包装在另一个事件处理程序中,我们不需要知道它接受哪些数据,因为它是 API 对象决定传递给函数的内容,而不是函数!所以我们简单地:
var tmp = db.oncomplete;
db.oncomplete = function (x) {
new_callback(x);
tmp(x);
}
我们不是从查询上一个回调而是从文档中获取x
参数。
somefunction.arguments //Use the arguments property to get arguments of another function
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数