【问题标题】:JSON.stringify changing propertiesJSON.stringify 改变属性
【发布时间】:2015-09-22 11:56:40
【问题描述】:

https://jsfiddle.net/6CDFr/229/

function testing() {
  foo = canvas.getObjects();
  bar = JSON.stringify(canvas.getObjects());
  console.log(foo);
  console.log(bar);
}

JSON.stringify() 正在改变 "x1","y1","x2" 和 "y2" 属性,如上面我的 JSFiddle 链接中所述,我不知道为什么。

【问题讨论】:

    标签: javascript json fabricjs


    【解决方案1】:

    来自 JSON.stringify (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON_behavior) 的 (Mozilla) 文档

    toJSON() 行为

    如果一个被字符串化的对象有一个名为 toJSON 的属性,它的值 是一个函数,那么 toJSON() 方法自定义 JSON 字符串化行为:而不是被序列化的对象, toJSON() 方法调用时返回的值将被序列化。 例如:

    如果你使用以下,你应该得到相似的值

    function testing() {
        foo = canvas.getObjects()[0];
        bar = JSON.stringify(canvas.getObjects()[0]);
        console.log(foo.toJSON());
        console.log(bar);
    }
    

    或者如果您将 toJSON 属性设置为未定义(但我很确定这将对 fabric.js 造成严重破坏,除非您在对象的副本上执行此操作 - 我已直接在下面的对象上执行此操作)

    function testing() {
        foo = canvas.getObjects();
        bar = JSON.stringify(canvas.getObjects().map(function (o) {
            o.toJSON = undefined;
            return o
        }));
        console.log(foo);
        console.log(bar);
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2014-10-10
    • 2013-04-16
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多