在javascript中通过引用传递和修改变量

时间:2013-02-19 07:23:57

标签: javascript html reference

我正在构建的其中一个插件中有一个事件处理机制。我正在触发一个事件,并希望将特定项目发送回事件处理程序参数。

在内部,事件处理程序,我想更改应该在插件内更改它的项目。我在下面有一个相同的简单版本。

datafile.js

var data = {
    'Project': [
        {
            'StartDate': '02/20/2013',
            'EndDate': '03/30/2013',
            'Description': 'Description 1',
            'ProjectID': 'ID1'
        },
        {
            'StartDate': '02/20/2013',
            'EndDate': '03/30/2013',
            'Description': 'Description 2',
            'ProjectID': 'ID2'
        }
]
};

function onbuttonClick() {
    onClickInternal(data.Project[1].Description);
};

主要index.html

<head>
    <script src="datafile.js"></script>
    <script type="text/javascript">
        function onClickInternal(description) {
            description = "This is the new description";
            document.getElementById("mydiv").innerHTML = data.Project[1].Description;
        };
    </script>
</head>

<body>
    <div id="mydiv"> </div>
    <input type="button" onclick="onbuttonClick()" value="Project"/>
</body>

如果我将整个data对象或Project数组作为事件处理程序参数传递,因为我想传递一个特定的Description项,并且没有任何意义修改它以便在data数组中进行修改。这是如何在JavaScript中完成的?

1 个答案:

答案 0 :(得分:0)

您只能在onClickInternal上设置arrayPos:

function onbuttonClick() {
    onClickInternal(1);
};

function onClickInternal(projectPos) {
    data.Project[projectPos].Description = "This is the new description";
    document.getElementById("mydiv").innerHTML = data.Project[projectPos].Description;
};

或使用回调方法

    function onbuttonClick() {
        onClickInternal(data.Project[1].Description, function(newDescription) {
            data.Project[1].Description = newDescription;
            return newDescription;
        });
    };


    function onClickInternal(description, setNewValue) {
        document.getElementById("mydiv").innerHTML = setNewValue("This is the new description");
    };