2011-09-25 2 views
0

Je dois avoir une sorte d'incompréhension fondamentale de la façon dont les objets fonctionnent en Javascript parce que je n'arrive pas à comprendre pourquoi ce qui suit. Vous pouvez voir le jsFiddle du code ci-dessous ici: http://jsfiddle.net/VivekVish/8Qvkn/1/Obtenir le type d'un objet en Javascript quand son prototype reçoit une instance d'un autre objet

Notez que est utilise la fonction getName définie ici: How do I get the name of an object's type in JavaScript?

Object.prototype.getName = function() 
{ 
    var funcNameRegex = /function (.{1,})\(/; 
    var results = (funcNameRegex).exec((this).constructor.toString()); 
    return (results && results.length > 1) ? results[1] : ""; 
}; 

function ContentProvider() 
{ 

} 

function LessonProvider() 
{ 
    console.log(this.getName()); 
} 

lessonProvider1 = new LessonProvider(); 
LessonProvider.prototype = new ContentProvider(); 
lessonProvider2 = new LessonProvider(); 

Le code ci-dessus produit les éléments suivants à la console:

LessonProvider

ContentProvider

Mais pourquoi n'est-ce pas LessonProvider dans les deux cas et h Comment peut-on en faire LessonProvider dans les deux cas?

Répondre

1

Si vous ne remettez pas le pointeur vers le constructeur, les tous les enfants rapportent que l'objet parent est son constructeur.

LessonProvider.prototype.constructor = LessonProvider; 

Vous pouvez essayer d'utiliser une fonction comme ci-dessous pour l'héritage:

function inherit(C, P) { 
    //empty function used as a proxy 
    var F = function() {}; 
    //set F's prototype equal to P's prototype 
    F.prototype = P.prototype; 
    //C will only inherit properties from the F's prototype 
    C.prototype = new F(); 
    //set access to the parents (P's) prototype if needed 
    C.uber = P.prototype; 
    //Set the constructor back to C 
    C.prototype.constructor = C; 
} 

inherit(LessonProvider, ContentProvider); 
1

si vous insistant pour

LessonProvider.prototype = new ContentProvider() 
LessonProvider.prototype.constructor=LessonProvider; 

Questions connexes