1

我正在按照教程学习backbone.js。我尝试了一些代码,它看起来很奇怪。src我首先用being初始化了一个模型实例,对模型实例thesource.jpg做了 a console.log,然后将src属性设置为aaa后跟 a console.log

在 javascript 控制台中,我看到两个输出srcaaa. 他们不应该不同吗?

JS代码

var Photo = Backbone.Model.extend({
   defaults: {
        src: 'placeholder.jpg',
        title: 'An image placeholder',
        coordinates: [0, 0]
    },

    initialize: function() {
        this.bind("change:src", function() {
            var src = this.get("src");
            console.log('Image source updated to ' + src);
        });
        console.log('This model has been initialized!');
    },

    changeSrc: function(source) {
        this.set({src: source});
    }
});

window.myPhoto = new Photo({title: "My awesomeness",
                        src: "thesource.jpg",
                        location: "Boston",
                        tags: ['big game', 'vacation']});

console.log(myPhoto.attributes);
myPhoto.set({src:'aaaa'});
console.log(myPhoto.attributes);

控制台输出

在此处输入图像描述

4

2 回答 2

1

当您在 google chrome 中记录对象时,它们的状态会在您在控制台中展开它们的属性时检索,而不是在您记录它们时检索。

您可以尝试记录克隆:

console.log(JSON.parse(JSON.stringify(myPhoto.attributes)));
myPhoto.set({src:'aaaa'});
console.log(JSON.parse(JSON.stringify(myPhoto.attributes)));
于 2012-06-12T14:21:56.687 回答
1

上面的答案有效,但我只想指出,Backbone 的功能基本上已经完成了。您可以使用toJSON,它克隆所有属性并返回一个对象。

console.log(myPhoto.toJSON());
myPhoto.set({src: 'aaaa'});
console.log(myPhoto.toJSON());

这将显示一个浅副本,因此它并不完全相同,但它的输入更少,并且在您正在寻找的情况下仍然可以工作。

于 2012-06-12T16:12:33.630 回答