我正在使用一个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().