20118


お世話になっております。

値が読み込めるが、書き込めないと言う現象に遭遇しました。コード中の何処で発生しているか分からないため、どうしたら発生するのかが分かれば探せないかと考えております。

私が把握している限り

[code]

    Object.freeze();
    Object.seal();
    Object.preventExtensions();
    
[/code]

などでロックがかかっているのでは？と疑い `Object.isExtensible();`
でチェックをかけたのですが`true`が返り変更可能と判断されます。

jQueryを使っているので`$.extend(true, {},
object);`で無理やりディープコピーして対処しているのですが、事故の元なので根本から解決したいと考えております。

また、このObjectの大本のデータは`Web SQL Database`から取得しております。

よろしくお願いいたします。


CC BY-SA 3.0
2015-12-17T05:43:06.470
20098
2015-12-18T00:51:10.973
2015-12-17T07:21:36.497
8000
question
javascript web-sql
Objectがロックされる原因について


コードがないので推測ですが、取得したデータを直接変更されているのではないでしょうか？  
本家の方で、websql の resultset は、readonly であると、回答がありました。

> According to the Web SQL Spec SQLResultSetRowList in SQLResultSet  
>  Interface is readonly.

[javascript - WebSQL: Are returned rows in SQLResultSetRowList immutable? -
Stack Overflow](https://stackoverflow.com/questions/19999906/websql-are-
returned-rows-in-sqlresultsetrowlist-immutable)


CC BY-SA 3.0
2015-12-17T12:08:21.417
20118
2015-12-17T12:08:21.417
2017-05-23T12:38:56.467
-1
7471
20098
answer


解決したコードも添付しておきます。  
なんとなく、察しておりましたがやはり読み込み専用なのですね……  
参照渡しで配列を組んでいたので、そこを変更して複製するように致しました。

[code]

    var result_record = null;
    function find_success(tx, results) {
        var find_row = results.rows.length;
        result_record = new Array();
        for (var n = 0; n < find_row; n++) {
            result_record[n] = $.extend(true, {}, results.rows.item(n));
        }
        callback_all();
    }
    
[/code]


CC BY-SA 3.0
2015-12-18T00:51:10.973
20126
2015-12-18T00:51:10.973
20098
answer