javascript – 不可变的chrome sqlite返回对象

前端之家收集整理的这篇文章主要介绍了javascript – 不可变的chrome sqlite返回对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个sqlite数据库作为webapp的存储系统.我一直在应用程序中直接使用从查询返回的对象.例如:
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上使用谷歌chrome 9.0.

解决方法

WebSQL spec不要求返回的项目被密封,但是由实施(规范要求项目是一个有序字典,其属性查询中的列顺序相同).

不,没有办法明确地要求一个可变对象,所以你想做一些像Stan所提出的convert_to_mutable()方法.

假设您正在使用第三方库,BTW可能具有此功能,例如jQuery.extend()_.extend().

猜你在找的JavaScript相关文章