您可以将整个“ this”关键字设置为Typescript类的构造函数中的对象吗?

时间:2019-11-25 19:39:42

标签: angular typescript

我有一个获取json用户数据的服务,我想在对象上添加一些方法。我正在考虑通过为用户数据创建一个类,然后将从json获得的对象传递到我的构造函数中来做到这一点:

class UserData {
  constructor(userData){
    this = userData
  }

  getNode1(){
    return this.textNodes.node1;
  }
}

在我的服务中,我有这样的代码

import { Injectable } from '@angular/core';
import { UserData } from 'wherever';

@Injectable({
  providedIn: 'root'
})
export class UserDataService {
  userData;

  constructor() { 
    let backendData = {
      textNodes: {
        node1: "some text",
        node2: "some other text"
      }
    }

    this.userData = new UserData(backendData);
  }
}

我尝试但收到此错误:模块解析失败:分配给右值。

我可以做整个对象,每个字段都喜欢这样:this.textNodes.node1 = backendData.textNodes.node1用于每个字段,但这是一个巨大的丑陋对象。

有人能做到这一点吗?

2 个答案:

答案 0 :(得分:1)

this设置为等于类内的任何内容将永远不会起作用。 this是对您当前所在类的引用,因此您将不使用对自身的引用。您可以尝试这样的事情:

class UserData {
  private userData: UserDataInterface;
  constructor(userData: UserDataInterface){
    this.userData = userData
  }

  getNode1(){
    return this.userData.textNodes.node1;
  }
}

interface UserDataInterface {
  textNodes: {
    node1: any;
    node2: any
  };
}

答案 1 :(得分:0)

从这里我可以看到,您有2个简单的解决方案:

1-使用Object.assign函数。

this.userData = Object.assign(new UserData(), backendData);

2-如果您的数据来自http请求,并且您使用的是HttpClient,则只需执行

this.http.get<UserData>(backendUrl)... etc

如果会自动为您反序列化。

希望我能对您有所帮助。