Как получить доступ к методу из класса из другого класса?
Я хочу использовать технику объектно-ориентированного программирования с JavaScript, но не могу получить доступ к методу из одного класса из другого класса. Как можно сделать, как следующее?
class one{
write(){
console.log("Yes! I did!");
}
}
class two{
var object=new one();
tryingMethod(){
object.write();
}
}
Я получаю следующую ошибку:
Uncaught SyntaxError: неожиданный идентификатор ->> для
var object=new one();
3 ответа
Ваш синтаксис не является законным. В вашей консоли должна быть ошибка, показывающая, какая строка кода неверна.
Если это статический метод (не использует данные экземпляра), тогда объявите его как статический метод, и вы можете напрямую вызывать его.
Если это метод экземпляра, то вы обычно создаете объект типа 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
,
Я бы порекомендовал не связывать классы так тесно и делать что-то вроде этого...
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;
});
});
Вы можете упаковать зависимости в контейнер.
class Provider {
private _one?: One;
private _two?: Two;
one(): One {
return this._one || (this._one = new One(this));
}
two(): Two {
return this._two || (this._two = new Two(this));
}
}
class One {
constructor(private provider: Provider) { }
write() {
console.log("Yes! I did!");
}
}
class Two {
constructor(private provider: Provider) { }
tryingMethod() {
this.provider.one().write();
}
}