toJSON()和JSON.Stringify()之间的区别
如果您需要读取或克隆模型的所有数据属性,请使用其toJSON()方法。此方法以对象的形式返回属性的副本(尽管名称不同,但不是JSON字符串)。(当JSON.stringify()通过toJSON()方法传递给对象时,它将对toJSON()的返回值而不是原始对象进行字符串化。上一节中的示例在调用JSON.stringify时利用了此功能。
()记录模型实例。)
http://addyosmani.github.io/backbone-fundamentals/#backbone-
basics
谁能告诉我,这两种方式之间的差异representing an object
的JSON
符号。我只是感到困惑,无论是实现相同还是不同。
回答:
从精美的手册中:
如果要被字符串化的对象具有一个名为
toJSON
的属性,其值是一个函数,那么该toJSON
方法将自定义JSON字符串化行为:代替被序列化的对象,toJSON
方法被调用时返回的值将被序列化,而不是被序列化的对象。
这就是为什么Backbone使用该toJSON
方法进行序列化并给定名为的模型实例的原因m
,您可以这样说:
var string = JSON.stringify(m);
并从中获取属性,m
而不是从服务器中忽略一堆噪音。
也就是说,主要区别在于toJSON
产生的值(数字,布尔值,对象等)将转换为JSON字符串,而JSON.stringify
始终产生一个字符串。
该默认骨干toJSON
仅仅是这个(适用机型):
return _.clone(this.attributes);
这样就m.toJSON()
为您提供了模型属性的 浅表
副本。如果有数组或对象作为属性值,那么您将结束意外的引用共享。注意,Backbone.Model#clone
也遭受这个问题。
如果您想安全地克隆模型的数据,则可以将其发送出去JSON.stringify
,然后JSON.parse
获得深层副本:
var data = JSON.parse(JSON.stringify(model_instance));var cloned_model = new M(data);
model_instance
您的骨干模型实例在哪里M
?
以上是 toJSON()和JSON.Stringify()之间的区别 的全部内容, 来源链接: utcz.com/qa/402352.html