首页 > 解决方案 > 用函数解析对象

问题描述

var Car = function(name, year) {
    this.name = name;
    this.year = year;

    this.print = function() {
        console.log(name+" "+year);
    }
}

var tesla = new Car("tesla", 2018);
tesla.print();
tesla = JSON.parse(JSON.stringify(tesla));
console.log(tesla);
tesla.print(); // Uncaught TypeError: tesla.print is not a function

解析后如何将打印功能添加到对象?有没有一个优雅的解决方案?

标签: javascriptjsonfunctionparsing

解决方案


JSON 数据格式不支持函数(如果您从 JavaScript 对象生成一些 JSON,然后尝试使用 C# 解析它,这将非常无用!)。

一个明智的方法是更改Car​​构造函数,以便它可以接受一个对象作为第一个参数。

var Car = function(name, year) {
    if (typeof name === "object") {
        // use properties of `name` to set everything in this object
    } else {
        // Treat name and year as a string and number just like you are now
    }
    ...

那么你也能:

tesla = new Car( JSON.parse(JSON.stringify(tesla)) );

…这也将生成一个具有正确原型的对象。


推荐阅读