使用.apply能否读取回调函数入参实时值?参数undefined原因排查
问题根源
- 第一处错误是
apply方法的用法不符合规范:Function.prototype.apply()的第二个入参要求是参数数组/类数组对象,你传入的tempVariable是普通键值对象,apply会尝试按数字索引拆分该对象的属性作为单独参数传给回调,相当于实际执行的是callBackFunction(tempVariable[0], tempVariable[1], ...),而你的对象没有0、1这类数字键,因此回调拿到的第一个参数自然为undefined。 - 第二处错误是回调函数的属性取值逻辑错误:就算后续正确把对象传入回调,你用数字索引
param[i]取普通对象的属性也会返回undefined,因为你的对象键是item1~item5,不是数字下标。 - 额外注意:如果没有先点击
Bind Events按钮给全局tempVariable赋值,对象会为空,就算逻辑正确也不会有输出内容。
修复方案
修改Dynamic.js中的回调调用逻辑,两种方案二选一即可:
- 方案1:改用
call方法传递单个参数
var testMe = function (properties) { $(document).ready(function () { $(document).on('click', '#okButton', function () { properties.okButtonCallback.call(this, properties.okButtonCallbackParameters); }); }); };- 方案2:把参数包裹为数组后再用
apply调用
properties.okButtonCallback.apply(this, [properties.okButtonCallbackParameters]);- 方案1:改用
修改回调函数的遍历逻辑,按对象的键取值:
function callBackFunction(param) { var keys = Object.keys(param); var size = keys.length; if (size > 0) { for (var i = 0; i < size; i++) { var currentKey = keys[i]; alert((i + 1) + ' parameter value: ' + param[currentKey]); } } }
内容的提问来源于stack exchange,提问作者sunil20000
相关产品推荐
相关产品推荐

