我们可以使用“.apply”读取传递给回调函数的参数的实时值吗?
Can we read real time value of parameters passed to callback function using “.apply”?
在我的场景中,我有接受一些参数(0 个或更多)的回调函数。我已经声明了一个对象全局变量并将其传递给我的回调函数,稍后在代码的某些部分更改了它的值,但是当我单击 okButton
(映射到回调函数)时,函数被调用但参数来了作为未定义的。有人知道这种方法有什么问题吗?
HTML代码:
<button id="bindEvents" onclick="BindEvents()">Bind Events</button>
<button id="okButton">Click Me</button>
部分申请页面:
var tempVariable = {};
function BindEvents() {
tempVariable.item1 = 100;
tempVariable.item2 = 200;
tempVariable.item3 = 300;
tempVariable.item4 = 400;
tempVariable.item5 = 500;
}
function callBackFunction(param) {
var size = Object.keys(param).length;
if (size > 0) {
for (var i = 0; i < size; i++) {
alert((i + 1) + ' parameter value: ' + param[i]);
}
}
}
testMe({
okButtonCallback: callBackFunction,
okButtonCallbackParameters: tempVariable
});
Dynamic.js
var testMe = function (properties) {
$(document).ready(function () {
$(document).on('click', '#okButton', function () { properties.okButtonCallback.apply(this, properties.okButtonCallbackParameters);
});
});
};
需要进行两项更改才能使其正常工作。
Dynamic.js
根据@Bravo 和@Robin Zigmond 的建议,我将 .apply 替换为 .call。
var testMe = function (properties) {
$(document).ready(function () {
$(document).on('click', '#okButton', function () {
properties.okButtonCallback.call(this, properties.okButtonCallbackParameters);
});
});
};
一些应用页面:改变了我读取参数的方式
function callBackFunction(param) {
var size = Object.keys(param).length;
if (size > 0) {
var valuesArray = Object.values(param)
for (var i = 0; i < size; i++) {
console.log((i + 1) + ' parameter value: ' + valuesArray[i]);
}
}
}
在我的场景中,我有接受一些参数(0 个或更多)的回调函数。我已经声明了一个对象全局变量并将其传递给我的回调函数,稍后在代码的某些部分更改了它的值,但是当我单击 okButton
(映射到回调函数)时,函数被调用但参数来了作为未定义的。有人知道这种方法有什么问题吗?
HTML代码:
<button id="bindEvents" onclick="BindEvents()">Bind Events</button>
<button id="okButton">Click Me</button>
部分申请页面:
var tempVariable = {};
function BindEvents() {
tempVariable.item1 = 100;
tempVariable.item2 = 200;
tempVariable.item3 = 300;
tempVariable.item4 = 400;
tempVariable.item5 = 500;
}
function callBackFunction(param) {
var size = Object.keys(param).length;
if (size > 0) {
for (var i = 0; i < size; i++) {
alert((i + 1) + ' parameter value: ' + param[i]);
}
}
}
testMe({
okButtonCallback: callBackFunction,
okButtonCallbackParameters: tempVariable
});
Dynamic.js
var testMe = function (properties) {
$(document).ready(function () {
$(document).on('click', '#okButton', function () { properties.okButtonCallback.apply(this, properties.okButtonCallbackParameters);
});
});
};
需要进行两项更改才能使其正常工作。
Dynamic.js 根据@Bravo 和@Robin Zigmond 的建议,我将 .apply 替换为 .call。
var testMe = function (properties) {
$(document).ready(function () {
$(document).on('click', '#okButton', function () {
properties.okButtonCallback.call(this, properties.okButtonCallbackParameters);
});
});
};
一些应用页面:改变了我读取参数的方式
function callBackFunction(param) {
var size = Object.keys(param).length;
if (size > 0) {
var valuesArray = Object.values(param)
for (var i = 0; i < size; i++) {
console.log((i + 1) + ' parameter value: ' + valuesArray[i]);
}
}
}