如何从另一个类的类访问方法?

时间:2016-08-26 23:28:40

标签: javascript oop

我想在JavaScript中使用面向对象编程技术但我无法从另一个类的一个类访问方法。怎么能这样呢?

class one{

  write(){
    console.log("Yes! I did!");
  }
}

class two{
   var object=new one();

   tryingMethod(){
   object.write();
   }
}

我收到以下错误:

  

未捕获的SyntaxError:意外的标识符 - >> var object=new one();

2 个答案:

答案 0 :(得分:8)

您的语法不合法。控制台中应该出现错误,显示哪行代码不正确。

如果它是静态方法(不使用任何实例数据),则将其声明为静态方法,您可以直接调用它。

如果它是一个实例方法,那么你通常会创建一个one类型的对象,然后在该对象上调用该方法(通常在构造函数中)。

要使方法保持静态(在特定情况下似乎没问题):

class One {
  static write(){
    console.log("Yes! I did!");
  }
}

class Two {
   tryingMethod(){
     One.write();
   }
}

对于非静态情况,您没有正确的语法。您似乎想在One的构造函数中创建Two对象的实例,如下所示:

class One {
  write(){
    console.log("Yes! I did!");
  }
}

class Two {
   constructor() {
       this.one = new One();
   }

   tryingMethod(){
     this.one.write();
   }
}

var x = new Two();
x.tryingMethod();

注意:我还遵循一个常见的Javascript约定,即使用以大写字母/构造函数名称开头的标识符,例如One而不是one

答案 1 :(得分:3)

我建议做的不是把课程紧紧地绑在一起,做这样的事情......

class One {
  write() {
    console.log("Yes! I did!");
  }
}

class Two {
  constructor(one = new One())  {
    this.one = one;
  }
  tryingMethod() {
    this.one.write();
  }
}

现在你能做的就是......

const two = new Two();
two.write();

这使您可以更好地分离关注点,并允许您更轻松地对Two类进行单元测试,因为如果需要,可以传入One类的模拟实现。

describe("two class", () => {
  it("should do something", () => {
    const one = {
      write: sinon.spy()
    };
    const two = new Two(one)

    two.tryingMethod();

    expect(one.write.calledOnce).to.be.ok;
  });
});