Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript JSON.stringify松散类型和函数_Json_Typescript - Fatal编程技术网

typescript JSON.stringify松散类型和函数

typescript JSON.stringify松散类型和函数,json,typescript,Json,Typescript,我知道JSON.stringify没有stringify函数,但好的做法是什么,因为水合作用确实让人筋疲力尽。我不想创建新对象。有什么想法吗 class pers { name = ""; last = ""; constructor(name: string, last: string) { this.name = name; this.last = last; } alo() { alert(this

我知道JSON.stringify没有stringify函数,但好的做法是什么,因为水合作用确实让人筋疲力尽。我不想创建新对象。有什么想法吗

class pers {
    name = "";
    last = "";

    constructor(name: string, last: string) {
        this.name = name;
        this.last = last;
    }

    alo() {
        alert(this.name);
    }
}

let pa = new pers("ben", "troq");
let s = JSON.stringify(pa);
let o = <pers>JSON.parse(s);
let pb = new pers("", "");

pb = o;
pb.alo();
classpers{
name=“”;
last=“”;
构造函数(名称:string,最后一个:string){
this.name=名称;
this.last=last;
}
alo(){
警报(此名称);
}
}
设pa=新的PER(“ben”、“troq”);
设s=JSON.stringify(pa);
设o=JSON.parse;
设pb=新的PER(“,”);
pb=o;
pb.alo();

将数据与功能分离如何

interface PersData {
    name: string;
    last: string;
}

class pers {
    private data: PersData;

    constructor(data: PersData | string) {
        this.data = typeof data === "string" ? JSON.parse(data) : data;
    }

    alo() {
        alert(this.data.name);
    }
}

把数据和功能分开怎么样

interface PersData {
    name: string;
    last: string;
}

class pers {
    private data: PersData;

    constructor(data: PersData | string) {
        this.data = typeof data === "string" ? JSON.parse(data) : data;
    }

    alo() {
        alert(this.data.name);
    }
}

问题在于这一行:

let o = <pers>JSON.parse(s);
您需要使用JSON作为Nitzan手动创建对象实例,或者创建一个例程,读取一些元数据信息,以自动创建具有相应属性的正确实例


对于后一种方法,我建议尝试一下,我创建这种方法是为了为这一问题提供一种优雅且适应性广泛的解决方案:

@JsonObject
class pers {
    @JsonMember name = "";
    @JsonMember last = "";

    constructor(name?: string, last?: string) {
        this.name = name;
        this.last = last;
    }

    alo() {
        alert(this.name);
    }
}
let o=TypedJSON.parse(s,pers);
o pers的实例;//真的
o、 alo();//“本”
注意无参数构造函数,这是必需的(在大多数类似的系统中也是如此)


此解决方案建立在上,但不是必需的(但是,如果没有它,您将需要手动指定属性的构造函数:
@JsonMember({type:String})…

问题是这一行:

let o = <pers>JSON.parse(s);
您需要使用JSON作为Nitzan手动创建对象实例,或者创建一个例程,读取一些元数据信息,以自动创建具有相应属性的正确实例


对于后一种方法,我建议尝试一下,我创建这种方法是为了为这一问题提供一种优雅且适应性广泛的解决方案:

@JsonObject
class pers {
    @JsonMember name = "";
    @JsonMember last = "";

    constructor(name?: string, last?: string) {
        this.name = name;
        this.last = last;
    }

    alo() {
        alert(this.name);
    }
}
let o=TypedJSON.parse(s,pers);
o pers的实例;//真的
o、 alo();//“本”
注意无参数构造函数,这是必需的(在大多数类似的系统中也是如此)

此解决方案基于,但不是必需的(但是,如果没有它,您将需要手动指定属性的构造函数:
@JsonMember({type:String})..

替换:

let o  = <pers>JSON.parse(s);
let pb = new pers("", "");

pb = o;
pb.alo();
它应该会起作用
Object.create
(ES5.1)创建一个对象,该对象的链接原型是来自
pers
类的对象,但不运行
pers
构造函数。然后
Object.assign
(ES6)将属性从JSON中未序列化的对象复制到
pb
引用的对象。因为原型是由
对象正确设置的。create
调用这些方法将起作用

替换:

let o  = <pers>JSON.parse(s);
let pb = new pers("", "");

pb = o;
pb.alo();

它应该会起作用
Object.create
(ES5.1)创建一个对象,该对象的链接原型是来自
pers
类的对象,但不运行
pers
构造函数。然后
Object.assign
(ES6)将属性从JSON中未序列化的对象复制到
pb
引用的对象。因为原型是由
对象正确设置的。create
调用这些方法将起作用

不相关,但帮你自己一个忙,让代码保持一致(在
=
周围的每个地方都放上空格,如果这让你更高兴的话,也不要在任何地方这样做),并写出名字(class
person
,带有属性
firstname
lastname
,例如,而不是pers,name,last)。
pa
s
o
pb
甚至代表什么?不相关,但请帮自己一个忙,使代码一致(在
=
周围的每个地方都放上空格,如果这让你更快乐的话,在任何地方都不要这样做),并写出名字(类
person
,具有属性
firstname
lastname
例如,而不是pers、name、last).pa、
s
o
pb
代表什么?你能解释一下你的答案而不是把代码放在这里吗?什么是让你的答案起作用的关键?我问你,因为有了解释,其他人可以从你的答案中学到东西,并将其应用到其他问题上。这就是stackoverflow是about---不要盲目地复制和粘贴一些代码。对不起,我认为代码片段是不言而喻的。编辑并添加了一个解释。你能解释你的答案而不是仅仅把代码放在这里吗?你的答案起作用的关键是什么?我问,因为有了解释,其他人可以从你的答案中学到东西,并将其应用到其他问题上。Tha这就是stackoverflow的意义——不要盲目地复制和粘贴一些代码。对不起,我认为这段代码是不言而喻的。编辑并添加了解释。