【问题标题】:Can we read real time value of parameters passed to callback function using “.apply”?我们可以使用“.apply”读取传递给回调函数的参数的实时值吗?
【发布时间】:2021-10-27 23:04:16
【问题描述】:

在我的场景中,我有接受一些参数(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); 
        });
    });
};

【问题讨论】:

  • apply 将一个 array 参数作为第二个参数,您已将一个对象传递给它
  • 根据需要使用.call或传入array

标签: javascript jquery javascript-objects jquery-events


【解决方案1】:

需要进行两项更改才能使其正常工作。

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]);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 2014-09-22
    • 1970-01-01
    • 2011-04-21
    • 2012-12-08
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    相关资源
    最近更新 更多