虽然正确定义了Javascript成员变量未定义错误

时间:2017-09-10 18:21:57

标签: typescript

我正在尝试将一个成员变量的属性复制到另一个成员变量。两者都属于同一类型。当我打电话给'trackChanges'浏览器显示错误:

  

TypeError:无法读取属性' hasOwnProperty'未定义的

有人能说出为什么this.originalData在运行时不知道吗?

export class myClass {

  data: IMyData;
  originalData: IMyData;

  trackChanges() {
    for (const attr in this.data) {
      if (this.originalData.hasOwnProperty(attr)) {
        this.originalData[attr] = this.data[attr];
      }
    }
  }

  constructor() {
    this.data.field1 = '123';
    this.data.field2 = 12;
  }

1 个答案:

答案 0 :(得分:1)

您的代码中没有任何地方为成员变量赋值。在Typescript中定义只是告诉编译器成员将存在于对象上由你来分配一个值,通过在声明它时使用初始化器,在构造函数,方法中,或通过访问设置成员在外部:

export class myClass {

    data: IMyData = {}; // Initialize using an object literal when declaring
    originalData: IMyData = {}; // Initialize using an object literal when declaring
    constructor(data: IMyData = {}) {
        this.originalData = Object.assign({}, this.data) // Create a copy of the original and assign it to the field
        this.data = data; // Assign data to the field
    }
    trackChanges() {
        for (const attr in this.data) {
            if (this.originalData.hasOwnProperty(attr)) {
                this.originalData[attr] = this.data[attr];
            }
        }
    }
}

var myInstance = new myClass({ name: "Jon"});
myInstance.data = {}; // External assignment