Javascript 不可变chrome sqlite返回对象

Javascript 不可变chrome sqlite返回对象,javascript,sqlite,html,google-chrome,Javascript,Sqlite,Html,Google Chrome,我正在使用sqlite DB作为Web应用程序的存储系统。我一直在使用直接在应用程序中从查询返回的对象。例如: function get_book_by_id(id,successCallback,errorCallback) { function _successCallback(transaction, results) { if(results.rows.length==0) {successCallback(null);} else

我正在使用sqlite DB作为Web应用程序的存储系统。我一直在使用直接在应用程序中从查询返回的对象。例如:

function get_book_by_id(id,successCallback,errorCallback)
{
    function _successCallback(transaction, results)
    {
        if(results.rows.length==0) {successCallback(null);}
        else
        {
            book=results.rows.item(0);
            successCallback(book);
        }
    }
    db.transaction(
        function (transaction) {
            transaction.executeSql("SELECT id,title,content,last_read from books where id=?;",[id], _successCallback, errorCallback);
    });
}
这将返回一个具有给定id的对象,所有列都作为属性提供。美好的我刚刚发现的问题是,结果集对象的所有属性都是不可变的。因此,例如,如果我想更改财产“所有权”,它将不起作用,在我看来,这毫无意义。例如:

get_book_by_id(1,handle,error);
function handle(book)
{
 //THIS DOESN'T WORK, book.title is still what it was.
 book.title=book.title+"more text";

}
当然,我可以将我的所有DB对象转换为可变对象,但我宁愿不这样做

这是预期的行为吗?我可以请求可变对象吗

我正在Mac OS X上使用google chrome 9.0。

不要求对返回的项进行密封,但这取决于实现(规范要求该项是一个有序字典,其属性的顺序与查询中的列相同)

不,没有办法显式地请求可变对象,因此您需要执行Stan建议的
convert_to_mutable()
方法


顺便说一句,假设您使用的是第三方库,它可能有这样的功能,例如或。

基于Stepan的答案,但对于像我这样希望从SO那里快速解决问题的人。
您可以创建另一个基本对象,并将sqlite行属性复制到该对象上。
大概是这样的:

var immutable_book = results.rows.item(0);
var book = {};
for (var prop in immutable_book) {
    if (immutable_book.hasOwnProperty(prop)) {
        book[prop] = immutable_book[prop];
    }
}
这将进入_successCallback,稍后您可以执行以下操作:

book.title=book.title+"more text"; // works now !

我在iOS Safari中遇到了这个问题,但在Chrome和Android web kit浏览器中,我能够直接更新返回的行对象的属性。

我这样做是为了解决这个问题:函数convert_to_mutable(result_object){var mutable=new object();for(result_object中的var key){mutable[key]=result_object[key]};return mutable;}你能展示一下你是如何创建数据库或链接到它的文档的吗?我在这里这么做的:-项目的目标是为没有版权的书籍编写一个基于html5的电子书阅读器,我在过去几年里没有花太多时间,我应该这样做。斯坦·维切尔,你有没有尝试过Object.defineProperty()使你的结果可变。最后我用了这个。我想知道这是效率还是效率。newData=JSON.parse(JSON.stringify(resultData));