javascript - 通过引用将字符串传递到方法中

标签 javascript jquery event-handling

编辑:抱歉,我忘了提及我无法更改plugins.js。许多其他应用程序都使用它。

我正在尝试将 responseName 参数传递到 jQuery 单击处理程序中作为引用。然而它是作为一个值传递的。

在我的回调函数中,我将 time.ref 更改为 'b',但当它在 sendResponse() 中发送回服务器时code> 它仍在发送 'a'。我该如何解决这个问题?

Plugins.js

Whispir.plugins.customResponseRules =  {

    attachResponse: function(selector, responseName, callback){

        $(selector).on('click', function(){

            if (_.isFunction(callback)) {
                callback();
            }

            sendResponse({
                textPrompt: responseName, 
                name: responseName
            });

        });


    }

}

主要代码

var time = {ref: 'a'};

$(document).ready(function() {


    Whispir.plugins.customResponseRules.attachResponse(
            '#ok-button',
            time.ref,
            function(){
                time.ref = 'b';
            }
    );


});

最佳答案

您的实际问题是您正在更改回调中的原始对象,但发送到服务器的内容是传递给函数的内容。一旦更改了原始对象,它们就不再相同。

字符串在 JavaScript 中是不可变的,它们实际上总是通过引用传递。

但是,因为它们是不可变的,所以您无法更改该特定字符串(对字符串的所有更改,创建一个新字符串),因此如果您想要做的是更改传入的字符串,那么您需要将字符串嵌入为对象的属性并传递该对象。

<小时/>

因此,在您的特定代码中,您可以传递 time 对象而不是 time.ref 字符串。这样,您就可以在函数中将 time.ref 更改为您想要的任何内容,只要在发送到服务器之前从 time.ref 获取数据,您就可以始终拥有最新数据:

Whispir.plugins.customResponseRules =  {

    attachResponse: function(selector, responseObj, callback){
        $(selector).on('click', function(){
            if (_.isFunction(callback)) {
                callback();
            }

            sendResponse({
                textPrompt: responseObj.ref, 
                name: responseObj.ref
            });
        });
    }
}

var time = {ref: 'a'};

$(document).ready(function() {
    Whispir.plugins.customResponseRules.attachResponse(
            '#ok-button',
            time,
            function(){
                time.ref = 'b';
            }
    );
});
<小时/>

现在,OP 通知我们插件代码无论如何都无法更改。

如果你不能修改插件,那么你就不能这样做。该插件正在将您传递给它的内容作为参数发送,并且您无法从插件外部更改该参数。私有(private)范围内的字符串参数,因此如果您无法更改该范围内的代码,那么您也无法更改它。

关于javascript - 通过引用将字符串传递到方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23881844/

相关文章:

javascript - 在选定的搜索中禁用某些选项

javascript - 如何使用 javascript 读取 html 页面中的输入而不将焦点集中在一个字段

javascript - JQuery event.target 错误

javascript - 如何在 Node js 中执行多个 Post 请求

javascript - 带有 ng-model 的 Angular 1.5 组件

javascript - 如何在 Kendo UI jQuery 中获取下拉列表的选定文本?

c# - 如何处理添加到列表事件?

javascript - 如何将您的开发堆栈与您的项目分开?

JavaScript 在 Firefox Scratchpad 中运行,但与 HTML 一起加载时无法运行

javascript - 我怎样才能用jquery编写下面的编程