2014-05-14 4 views
1
var Super = function() {} 
Super.prototype.newOfThisKind = function() { 
    return new this.myConstructor() 
} 
var Sub1 = function() { this.myConstructor = Sub1 } 
var Sub2 = function() { this.myConstructor = Sub2 } 
Sub1.prototype = new Super() 
Sub2.prototype = new Super() 
console.assert(new Sub1().newOfThisKind() instanceof Sub1) 
console.assert(new Sub2().newOfThisKind() instanceof Sub2) 

Этот код работает, как ожидалось, но как я могу написать newOfThisKind без установки myConstructor в каждом подклассе?получить конструктор подкласса в суперкласс

+0

Я не думаю, что это может быть сделано. Но зачем это нужно? Если это просто для запуска какого-либо действия, просто создайте второй метод. – paulodiovani

+0

Я не уверен, что вы имеете в виду. Цель состоит в том, чтобы использовать newOfThisKind для любого экземпляра Super. – nxxy

ответ

1

Ну, я не понимаю, что это цель, но ответить на ваш вопрос:

var Super = function() { } 
    Super.prototype.newOfThisKind = function() { 
     return Object.create(this); 
    } 
    var Sub1 = function() { } 
    var Sub2 = function() { } 
    Sub1.prototype = new Super() 
    Sub2.prototype = new Super() 
    console.assert(new Sub1().newOfThisKind() instanceof Sub1) 
    console.assert(new Sub2().newOfThisKind() instanceof Sub2) 
Смежные вопросы