2012-01-06 3 views
1

УЧИТЫВАЯ парование Например:JavaScript наследование прототипов и конструкторы

function A(obj) { 
} 

B.prototype = new A; 
B.prototype.constructor = B; 

function B(obj) { 
    A.call(this, obj); 
} 

где B должны наследовать прототип от А. Этот код правильно? Почему функция A вызывается один раз, когда скрипт анализируется, без какого-либо экземпляра из A или B? Это из-за линии подбора?

B.prototype = new A; 

Если да, то как B наследует A без функции вызова A в определении.

ответ

4

Вы можете избежать вызова возвращается назад, если вы используете Object.create

B.prototype = Object.create(A.prototype) 

Object.create создает новый объект, который имеет данный параметр в качестве прототипа (фактический прототип, а не свойство «прототип») , Его нет в старых браузерах (IE < 8, FF < 4), но вы можете (для наших целей) создать свою собственную версию, если хотите. Основная идея именно создание версии A, что ничего не делает (и, следовательно, можно назвать wihthout нежелательных побочных эффектов)

if(!Object.create){ 
    Object.create = function(proto){ 
     var F = function(){}; 
     F.prototype = proto; 
     return new F(); //BTW, always use parenthesis when calling new. It looks better. 
    } 
} 

Другая вещь, которую вы можете сделать, никогда не ставить логику в функции конструктора и вместо того, чтобы поставить его в отдельный метод init, который должен быть вызван впоследствии.

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