2014-09-28 1 views
0

Здравый смысл в том, что для имитации ООП в JavaScript, мы делаем все, что в терминах функций и прототипы:Определение конструктор производного класса в Javascript

var fooObject = function() { 
    //Variables should be defined in the constructor function itself, 
    //rather than the prototype so that each object will have its own variables 

    this.someProperty = 5; //Default value 
}; 

//Functions should be defined on the prototype chain so that each object does not 
//have its own, separate function methods attached to it for performing the same 
//tasks. 

fooObject.prototype.doFoo = function() { 
    //Foo 
} 

Теперь, чтобы создать производный класс, мы делаем:

var derivedFromFoo = new foo(); 

Но что произойдет, если мы хотим сделать что-то другое в нашем конструкторе для производного объекта? Как и другие свойства? Можем ли мы сделать что-то вроде

var derivedFromFoo = function() { 
    this = new foo(); 
}; 
+1

FWIW, вы никогда не можете назначить 'this'. –

ответ

3
new foo(); 

Это экземпляр, а не класс.

Чтобы создать производный класс, вам нужно создать новую функцию, вызовите базовый CTOR внутри него, а затем установить новую функцию-х prototype на объект, созданный из базы prototype:

function Derived() { 
    Base.call(this); 
} 
Derived.prototype = Object.create(Base.prototype); 

Для более подробная информация и более длинная, более правильная реализация, см. мой blog post.

+0

+1 для 'call (this)' для вызова конструктора "суперкласс" – Tap

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