2010-08-08 16 views
13

J'ai lu à propos de Crockford's push pour using JavaScript in a more obviously prototypal manner (clonage d'objets pour en créer de nouveaux, n'utilisant jamais le mot-clé "new"). Mais dans la nature, je n'ai jamais vu quelqu'un utiliser ce style pour des projets plus importants.Où puis-je trouver un exemple de projet JavaScript volumineux utilisant la méthode de Crockford pour l'héritage prototypique?

Où puis-je trouver des exemples d'un grand projet utilisant ce style?

+0

Boris, je l'ai modifié votre question un peu ...Demander un exemple est bon, mais les discussions sur prototypal contre prototypal vs classique de Crockford ont été faites auparavant. [Par exemple] (http://stackoverflow.com/questions/1809914/oo-javascript-constructor-pattern-neo-classical-vs-prototypal) (... [et beaucoup plus] (http://stackoverflow.com/search? q = javascript + classic + prototypal) ...) Vous pourriez particulièrement aimer: [Quels sont les avantages de l'héritage prototypique par rapport au classique?] (http://stackoverflow.com/questions/2800964/what-are- the-benefits-of-prototypal-inheritance-over-classical) – Shog9

Répondre

5

ont à offrir un anti-awnser;) comme si pour voir les grands projets en utilisant aussi bien (s'il y en a). J'adore Object.create moi-même et je préfère, bien que je n'ai jamais été capable de l'utiliser largement dans un grand projet ni de le ressentir.

  1. OO Les développeurs sont accros à l'opérateur « nouveau », il est un Habitude difficile de se débarrasser et ils sont faciles à comprendre un coup d'oeil. Le code écrit d'une manière classique est maintenant plus facile à transmettre au prochain dev, ce qui est déjà un argument fort contre Object.create. Object.create dans ES5 (la prochaine version de JS) est immensément plus puissant et radicalement différent de Object.create en tant que shim dans ES3 (version JS actuelle). Pour cette raison, il vaut mieux éviter Object.create (comme c'est actuellement disponible) comme une stratégie largement utilisée dans les grands projets, car il fonctionnera différemment quand ES5 devient mainstream que ce qui est implémentable en ce moment. Les grands projets utilisent des frameworks (quand vous n'avez pas de ninjas JS voyous qui insistent pour tout écrire à partir de zéro réinventant la roue encore et encore) et tous les frameworks populaires promeuvent l'héritage prototypique de façon classique. Ils peuvent avoir une méthode Object.create sous la forme de .clone() ou quelque chose, mais elle est masquée par les didacticiels et la documentation en ce qui concerne l'héritage et le sous-classement des objets.

  2. Les propriétés privées sont impossibles avec Object.create dans ES3. Je suis tombé sur plus de problèmes plus je bidouillé autour avec Object.create et garçon ai-je tripoté avec elle ...

J'ai joué autour beaucoup avec Object.create et même un petit cadre écrit autour il a appelé 'Objection' (si vous êtes interressé, vous le trouverez;) tout en s'abstenant de créer des liens avec github) et 'JSoo' (discontinué). C'est juste trop loufoque, inachevé et progressif pour devenir mainstream et maintenable en termes de ressources humaines pour les grands projets. Je le recommande tout en étant un partisan.

+0

En fait, chaque fois que j'utilise personnellement le shim Object.create, je ne l'utilise qu'en configuration d'usine et en interne pour les frameworks que j'écris en tant que hobby. Ainsi, les seuls objets que je crée lorsque je lie des API sont des littéraux d'objets contenant des données intrinsèques, qui n'ont jamais besoin d'être sous-classées. Comme le Gang de quatre conseils, utilisez la composition sur l'héritage. – BGerrissen

-1

essayer: http://showroom.auction123.com/auction123/index.html

Nous n'utilisons pas du tout nouveau ... Nous avons simplement mis le résultat d'une fonction et l'utiliser comme une classe.

Par exemple:

// CLASS DECLARATION 
var ClassName = function() { 

    var public; 
    var private; 

    var publicFunction = function() { 
    // DO STUFF 
    }; 

    // RETURN OBJECT 
    return { 
    public: public, 
    publicFunction: publicFunction 
    }; 

}; 

Le retour définitif indique juste ce qui va être public.

instancier en faisant:

var object = ClassName(); 
+0

Eh bien, tout va bien pour ce qu'il fait, mais il n'y a pas d'héritage là-bas, prototypique ou autre ... Si vous devez créer chaque objet à partir de zéro à chaque fois, je Je devine que vous ne créez pas autant d'objets! – Shog9

+0

Ceci est le modèle de module, qui est destiné aux singletons. L'utiliser pour l'instanciation de plusieurs objets en tant que stratégie «serve-all» gaspillera de la mémoire car chaque méthode, la propriété de l'objet créé sera aussi un nouvel objet. Il y a zéro héritage, l'opérateur instanceof retournera toujours false, la méthode isPrototypeOf sera inutile et toute tentative de sous-classe est inutile. – BGerrissen

+1

Je ne vois pas comment, vous pouvez juste le prototype en ajoutant à l'objet déjà créé. –

0

Vous pouvez le trouver ici Nokia WRT Plug-in for Visual Studio, un plugin pour développeur de widget nokia.

De forum nokia:

The Nokia WRT Plug-in for Visual Studio provides features that enable 
the creation, editing, testing, and deployment of WRT widgets from within 
Visual Studio.