2010-02-13 3 views
57

Каков правильный/лучший способ расширить класс javascript, чтобы класс B наследовал все из класса A (класс B расширяет A)?Javascript extends class

+3

Actualy ... есть какой-то другой способ, но b.prototype = new a; – xpepermint

+1

У JavaScript нет классов. Поэтому весь этот вопрос не имеет смысла. Вы говорите о Java? Или ActionScript? У этих * do * есть классы, но они не имеют абсолютно никакого отношения к JavaScript. Или вы говорите о какой-либо библиотеке JavaScript, которая реализует OO на основе классов в JavaScript, например MooTools? В этом случае ответ зависит от той библиотеки, о которой вы говорите. –

+0

Есть мой объект класса: https://github.com/reduardo7/sjsClass/blob/master/sjsclass.js –

ответ

55

Посмотрите на Simple JavaScript Inheritance и Inheritance Patterns in JavaScript.

Простейший метод, вероятно, является функциональным наследованием, но есть плюсы и минусы.

+7

Вторая ссылка мертв. – Jarrett

+3

Вторая ссылка сейчас находится здесь: http://bolinfest.com/javascript/inheritance.php –

27

Дуглас Крокфорд имеет некоторые очень хорошие объяснения наследования в JavaScript:

  1. prototypal inheritance: «естественный» способ сделать что-то в JavaScript
  2. classical inheritance: ближе к тому, что вы найдете в большинстве языков ОО, но вид работает против зерна JavaScript
1
extend = function(destination, source) { 
      for (var property in source) { 
      destination[property] = source[property]; 
      } 
      return destination; 
    }; 

Extending JavaScript

Вы также можете добавить фильтры в цикл for.

+8

Это не то, что запросили OP и не исправили «удлинить» - вы должны перебирать Object.keys или, по крайней мере, проверять hasOwnProperty –

+0

Требуется hasOwnProperty проверять и перезаписывать методы и свойства, если они одинаковые, без возможности вызова метода суперкласса позже. –

Смежные вопросы