Аргумент передан по ссылке - PullRequest
2 голосов
/ 30 августа 2011

У меня есть следующая JavaScript функция:

function insertIntoTable(title, text, sketchFileName, categoryId)
{
    var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024);
    db.transaction(
        function (tx) {
            if (sketchFileName == '')
            {
                tx.executeSql('INSERT INTO TableXXX (title, content, created, categoryID) VALUES (?, ?, ?, ?)', 
                            [title, text, Date.now(), categoryId], 
                            function (transaction, resultSet) {
                                if (resultSet.rowsAffected) {
                                    myNameSpace.returnedId = resultSet.insertId;
                                }
                            }, handleSQLError);
            }
        }, handleSQLError);
    );
}

Теперь я использую глобальную переменную myNameSpace.returnedId, чтобы получить insertId.

Есть лилюбой способ добавить новый параметр в функцию insertIntoTable, который ссылается на myNameSpace.returnedId?

Ответы [ 2 ]

1 голос
/ 30 августа 2011

Вы можете ссылаться на переменную с двумя аргументами:

function insertIntoTable(title, text, sketchFileName, categoryId, nameSpace, variable)
{
    ...
    nameSpace[variable] = resultSet.insertId;
}

Назовите это так:

insertIntoTable( ..., myNameSpace, 'returnedId' );

Альтернативный метод - использовать функцию установки:

function insertIntoTable(title, text, sketchFileName, categoryId, setReturnedId)
{
    setReturnedId( resultSet.insertId );

}

Назовите это так:

insertIntoTable( ..., function(value){ myNameSpace.returnedId = value } );
0 голосов
/ 30 августа 2011

Измените функцию следующим образом:

function insertIntoTable(title, text, sketchFileName, categoryId, nameSpace) {
...
...
nameSpace.returnedId = resultSet.insertId; // assign this here

и вызовите функцию через:

insertIntoTable(someTitle, someText, someSketchFileName, someCategoryId, myNamespace)

Вы будете передавать ссылку на myNamespace (в функции она будет называться nameSpace). Тогда у вас будет доступ ко всем атрибутам myNameSpace (и вы можете назначать им какие-либо объекты).

...