2009-10-27 5 views
1

J'essaie d'obtenir une meilleure connaissance pratique de JavaScript. J'ai donc acheté le livre "JavaScript the good parts" de Douglas Crockford.JavaScript - Prototype

J'ai du mal à saisir le prototype pour le moment. Tout ci-dessous semble fonctionner dans mon navigateur jusqu'à ce que je tape // PROTOTYPE Exemple. Quelqu'un peut-il y jeter un coup d'oeil pour voir pourquoi je ne peux pas obtenir de sortie de celui-ci. (Ma page est vide sauf si je commente tout le code du prototype)

Nous vous remercions de votre aide.

Barry

var stooge = { 
    "first-name": "Jerome", 
    "last-name": "Howard", 
    "nickname": "J", 
    "profession" : 'Actor' 
}; 

// below is augmenting 
var st = stooge; 
st.nickname = "curly"; 
// st.nickname and nick are the same because both are ref's to the same object 
var nick = st.nickname; 


document.writeln(stooge['first-name']); //expect Jerome -- this is "suffix" retrieval 
document.writeln(st.nickname); //expect "curly" -- this is "notation" retrieval 
document.writeln(nick); //expect "curly" 
document.writeln(stooge.profession); 


//PROTOTYPE EXAMPLE; 
if (typeof Object.create !== 'function') 
{ 
    object.create = function(o) { 
      var F = function() {}; 
      F.prototype = o; 
      return new F(); 
}; 
var another_stooge = Object.create(stooge); 
another_stooge['first-name'] = 'Barry'; 
document.writeln(another_stooge['first-name']); 
// the below should be inherited from the prototype therefore "Actor" 
document.writeln(another_stooge.profession); 

Répondre

5

Une accolade de fermeture est manquante à la fin de l'expression de fonction affectée à object.create, et vous n'avez pas non plus mis en majuscules Object dans object.create = function(o) {.

//PROTOTYPE EXAMPLE; 
if (typeof Object.create !== 'function') 
{ 
    Object.create = function(o) { // <--- "Object" instead of "object" 
     var F = function() {}; 
     F.prototype = o; 
     return new F(); 
    }; 
} // <--- Closing brace was missing 
+0

Merci Tim, je ne serai pas attrapé par ça à nouveau maintenant :) – CaRDiaK

+0

@ Ferdinand: Nice edit, merci –

3

Vous semblez manquer l'accolade fermante pour la ligne object.create = function(o) { .... Je vois une accolade fermante pour le instruction if et pour la var F = function() {};, mais pas pour function(o). Une accolade fermante manquante supprimerait en effet la sortie, car Javascript supposerait tout avant que l'accolade de fermeture (manquant) fasse partie d'une définition de fonction, pas quelque chose à exécuter (encore).

+0

Nous vous remercions pour cela. Les deux réponses résolvent mon problème exactement. Je vais marquer Tim comme réponse car il a moins de points et a également souligné la capitalisation de O, mais merci beaucoup Mark vous m'a aidé à comprendre :) – CaRDiaK