Javascript наследование с привилегированной функцией - PullRequest
0 голосов
/ 20 марта 2012

Я упрощаю свой пример, чтобы понять суть моего вопроса. У меня есть базовый класс Javascript с привилегированной функцией. Мне действительно нужно скрыть myVar от просмотра, и я также хочу наследовать от baseClass.

function baseClass() {
  var myVar = new coolClass();

  this.myPrivileged = function() {
    myVar.coolFunction();
  }
}

Проблема в том, что я пытаюсь наследовать так:

function childClass() {

}
childClass.prototype = new baseClass();
childClass.prototype.reallyCoolFunction = function() {//Really cool stuff}

, но когда-либо будет создан только один экземпляр myVar, и он не будет работать, потому что coolClass имеет свойства, зависящие от экземпляра. так что если я сделаю это:

var x = new childClass();
var y = new childClass();

и x, и y будут иметь одинаковый экземпляр baseClass.myVar

Итак, насколько я могу судить, у меня есть два варианта:

  1. Сделать функцию myPrivileged прототипом функции и выставить myVar
  2. Скопируйте и вставьте внутренности baseClass в childClass (из-за чего мне хочется заткнуть рот)

Я не гуру javascript, поэтому я надеялся, что у кого-нибудь будет хорошая идея.

Заранее спасибо

1 Ответ

0 голосов
/ 20 марта 2012

Прежде всего, вам не нужно создавать экземпляр baseClass только для настройки наследования. Вы создаете экземпляр coolClass, который никогда не используется. Используйте суррогатный конструктор

function childClass() {
  ...
}

function surrogateCtor() {

}

surrogateCtor.prototype = baseClass;
childClass.prototype = new surogateCtor();

В вашем childClass вам нужно вызвать конструктор родителя

function childClass() {
    baseClass.call(this);
}

Это обеспечит инициализацию базового класса каждый раз, когда вы создаете экземпляр дочернего класса http://jsfiddle.net/mendesjuan/h2ypL/

См. Мой пост о наследовании в JS http://js -bits.blogspot.com / 2010/08 / javascript-inheritance-done-right.html

...