Моя цель состоит в том, чтобы добавить свойства к (этому) контексте главного функции от прототипа другой функции SubmainКак использовать call() с прототипами?
function Main() {
Submain.call(this);
//from here I want to be able to use this.a, this.b, this.c, this.d
//...Main code...
}
function Submain() {
//this works fine
this.a = 1;
this.b = 2;
//this does not work because of the context
this.doThis();
}
Submain.prototype.doThis = function() {
this.c = 3;
this.d = 4;
}
Итак, как использовать Submain прототип для этой цели ?
Я вижу, к чему вы клоните. Я не знаю, на какое решение вы надеялись. Объект, который вы предоставили, не имеет этого метода. Его можно было бы вручную помещать внутри 'Main' или' Main.prototype', но это выглядит не очень хорошо. Есть ли определенная причина, по которой вы упорядочили свой код таким образом? –
Вы можете добавить метод doThing вместо использования прототипов. Но это плохой выбор (влияние производительности на многие объекты). Лучшим выбором может быть копирование прототипа Main из прототипа Submain [см. Здесь] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain), чтобы лучше понять, как работает цепь прототипирования – allevo
На самом деле, мой главный прототип огромен, поэтому я хотел бы перерезать его в несколько файлов, чтобы быть более модульными. Я могу использовать sub = new Submain(), а затем использовать sub.c, sub.d, но я спросил себя, есть ли другое решение. – zbeyens