12
votes

JavaScript Augmentation de types de base (prototype héritage)

Je viens de commencer à lire sur Douglas Crockford's " javascript sur les bonnes parties em>" où il explique à propos d'augmentation des types de base.

Function.prototype.addMethod=function(name,func) {
    this.prototype[name]=func; 
    return this; 
};


1 commentaires

Non, c'est la mise en œuvre de JavaScript en héritage de prototype idioty. Son style bizarre en utilisant-fonction-as-constructeur vous donne aucun des avantages potentiels des prototypes, tout en étant de manière gratuite de la part de l'héritage de la classe que la plupart des programmeurs comprennent. Il est agréable de comprendre exactement ce que font les prototypes JavaScript, mais ne vous attendez pas à une épiphanie qui le rend évident pourquoi ce modèle a du sens. Parce que ça ne le fait pas.


3 Réponses :


16
votes

Il signifiait probablement le moment après cela, l'addMethod devient disponible pour toutes les objets de base strike> Types d'objets forts> Like String, Number, etc. Ceci est parce que l'objet de chaîne est un Fonction (mais les objets créés par la chaîne ne sont pas).

par exemple, donné, donné p> xxx pré>

vous pouvez faire p> xxx pré>

Mais pas p> xxx pré>

une brève explication du système de type JavaScript vient ici: p>

JavaScript n'a pas le concept normal des classes. Au lieu de cela, vous pouvez obtenir un peu la même chose en transformant toute fonction en constructeur par Puttitin le nouveau mot-clé devant celui-ci lorsqu'il est invoqué. P>

MyFunction.prototype.someNewMethod = function() {}


3 commentaires

À en juger par 'Ceci.Prototype [Nom]', je pense que vous avez exactement raison.


Pouvez-vous expliquer cela un peu plus? Trouver le concept difficile.


@erikkallen Comment est Type d'objet String (ou tout autre type d'objet de base) une fonction? Est-ce que l'objet string a un constructeur qui est un objet de fonction? S'il vous plaît expliquer cela un peu plus!



1
votes

Dans JavaScript orienté objet, une fonction peut servir de classe et de constructeur. Donc, si votre classe a été nommée MyObject, vous pouvez effectuer ce qui suit:

// create a class/constructor
function MyObject() {
   // ...
}

// add a static method to the MyObject class
MyObject.someFunction = function() {
   // ...
}

// add an instance method to the MyObject Class
MyObject.prototype.someFunction = function() {
   // ...
}


0 commentaires

1
votes
  1. fonctionne dans JavaScript sont des objets. Tous les objets ont une liaison cachée objet.Prototype. Ainsi pour la première déclaration: p>

    > `Function.prototype.addMethod=function(name,func) {}
    
  2. Pour la deuxième partie, c'est juste une affectation où vous définissez la paire de valeur Nom à l'objet.Prototype et retournera la méthode Ajouter à toutes les chaînes, les objets numériques car il est déclaré au prototype. LI> ol>

0 commentaires