Javascript:如何访问嵌套对象内部函数的类属性

时间:2019-05-27 17:56:30

标签: javascript

我正在使用javascript类,我想做些事情,但我不知道如何做。首先,这是我的课程:

class Company {
  constructor (options) {
    this.employee = options.employee;
    this.algorithm = "AZ1";
  }
}

现在,employee是一个对象,其中嵌套有另一个对象,而最终对象包含一系列功能:

employee {
  code {
    generate [Function: generate]
    alter [Function: alter]
  }
}

现在,我的问题是我想从任何这些功能中访问algorithm

顺便说一句;我正在尝试使用该类创建的对象来这样做:

const myCompany = new Company({ employee });

所以我想从algorithm中的generate函数访问myCompany属性。

2 个答案:

答案 0 :(得分:0)

您应该能够像这样访问算法:myCompany.employee.code.generate(myCompany.algorithm)

编辑:从您最初的问题还不清楚您是否试图使该算法对该类私有。这样的事情可能会起作用:

class Company {
  constructor (options) {
    this.employee = options.employee;
    this.algorithm = "AZ1";
  }

  generateEmployee = () => {
    this.employee.code.generate(this.algorithm);
  }
}

这将为您提供一种myCompany.generateEmployee方法,调用者可以在不传入算法的情况下使用该方法。

请注意,只有在使用像Babel这样的编译器时,此语法才有效。如果没有,则可以使用以下语法(因此您的方法具有正确的this上下文):

class Company {
  constructor (options) {
    this.employee = options.employee;
    this.algorithm = "AZ1";
    this.generateEmployee = this.generateEmployee.bind(this);
  }

  generateEmployee() {
    this.employee.code.generate(this.algorithm);
  }
}

答案 1 :(得分:0)

object1.field1 = object2是一种单向关系:

  • object1之后可以通过object2来访问field1
  • object2完全不知道object1在身边,因此也不知道其他领域。

您可以将其作为参数传递,例如object1.field1.dosomething(object1.field2),在实际情况下,它可以转换为:

myCompany.employee.code.generate(myCompany.algorithm)

(并且当然假设generate()进行了修改以期望使用这种参数。新添加的option不会影响该模式)