Définition et Extension de classesDéfinition et Extension de classes
Problème Vous voulez une stratégie efficace pour la définition et l'extension des classes. Théorie Une fonction est un objet, et que des recettes précédents illustrent, il est possible d'associer des propriétés et méthodes avec une fonction. Alors pourquoi il est nécessaire de créer des classes, puisque les fonctions peuvent être transformés en classes? La réponse se rapporte au problème de figurer à l'instance de la fonction. Les fermetures de JavaScript vous pouvez définir une fonction au sein d'une fonction, comme le montre le code suivant. Source: / website / ROOT / ajaxrecipes / javascript / fonction functionsareobjects.html GetFunctionFixed () (var inst = function (val_cmp) (assertEquals (val_cmp, inst.value);) inst return;) En utilisant une variable locale, l'instance de la fonction peut être référencée dans la mise en œuvre de la fonction. Cela fonctionne parce que les fonctions sont des objets, et donc objet de référencement qui se passe. Solution En utilisant le principe que les fonctions sont des objets, il est possible de créer une classe sans utiliser le nouveau mot clé, comme l'illustre l'exemple suivant, qui s'appuie sur la fonction au sein de la fonction technique. Source: / website / ROOT / ajaxrecipes / javascript / fonction definingextendingclasses.html CreateClassInstance () (var inst = function () (inst.instantiated = 10; inst.method = function () (inst.instantiated = 20;)) inst (); retour Inst;) Dans l'exemple de classe, une «classe» est créée parce que appelant la fonction va affecter les propriétés de la fonction. Ainsi, la fonction se comporte comme une classe "." Du courant variable est référencée dans la classe "," ce qui permet de référencer les propriétés et les méthodes de la classe "." En effet, la «classe» se comporte comme une vraie classe, comme en témoigne le code de test suivant. Source: / website / ROOT / ajaxrecipes / javascript / function_are_classes definingextendingclasses.html: function () (var CLS1 = CreateClassInstance (); info ( "function_are_classes", CLS1); cls1.value = 10;assertEquals (10, cls1.instantiated); cls1.method (); assertEquals (20, cls1.instantiated); Cls2 var = CreateClassInstance (); assertEquals ( "undefined", typeof (cls2.value));), Les expériences du code de test avec différentes facettes de démontrer que la instancié "objet" se comporte comme un objet. Le code en gras montre que les «objets» CLS1 et Cls2 sont en fait deux cas distincts. Comme il semble si facile de créer une «classe» et un «objet», pourquoi est-il un nouveau mot clé? La réponse est: parce que j'essaie de comprendre comment de contre-référence de l'instance de fonction avec la méthode est compliquée après la «classe» a été instancié, comme l'illustre le code source suivant. Source: / website / ROOT / ajaxrecipes / javascript / function_classes_generates_error definingextendingclasses.html: function () (var cls = CreateClassInstance (); cls.method2 = function () ( inst.instantiated = 40; )try ( cls.method2 ();testManager.failed ();) catch (e) (info ( "functions_classes_generates_error", "exception attendue (" + ➥ e.toString () + ")");)), Dans l'essai additionnel, la "classe" est instancié et assignée à la variable CLS. Les références CLS variable d'un «objet» qui se prolonge avec la méthode method2. Dans la mise en œuvre de method2, «l'objet» par exemple est référencé en utilisant la variable Inst. L'Inst variable a été choisi parce qu'il a été défini lorsque «l'objet» a été instancié. L'exécution du code va générer une exception parce inst n'est pas définie. Pour faire travailler l'exemple, la fonction référencée par method2 aurait eu à CLS de référence. En un mot, référençant l'instance de l'objet "au sein d'une fonction est plus compliquée qu'elle ne devrait l'être. La solution est le nouveau mot-clé, car il associe l'identificateur de cela avec l'instance de l'objet à partir d'une fonction. Réécrire le code CreateClassInstance d'utiliser le nouveau mot clé, nous arrivons à la fonction CreateRealClassInstance, indiqué dans le code suivant. Source: / website / ROOT / ajaxrecipes / javascript / fonction definingextendingclasses.html CreateRealClassInstance () (var inst = function () (this.instantiated = 10; this.method = function () (this.instantiated = 20;)) retour Inst new ();) En comparant CreateClassInstance et CreateRealClassInstance, la seule différence réelle est que le nouveau mot clé est utilisée tout en appelant la variable inst comme une fonction, et instal est remplacé par ce matériau. En utilisant le nouveau mot clé en face d'une fonction convertit la fonction dans une instance d'objet personnalisé, où l'instance de l'objet peut être référencé en utilisant l'identifiant ce dans la fonction. L'instance retournée objet peut être étendue et l'instance de référence en utilisant le mot-clé this , comme le montre le test suivant. Source: / website / ROOT / ajaxrecipes / javascript / function_instantiates_real_class definingextendingclasses.html: function () (var cls = CreateRealClassInstance (); cls.method2 = function () (this.instantiated = 40;) assertEquals (10, cls.instantiated), CLS . method2 (); assertEquals (40, cls.instantiated);), Appelant la fonction CreateRealClassInstance, l'instance d'objet retourné est assignée à la variable CLS. L'objet est élargi pour inclure la méthode method2, et dans la mise en œuvre de method2 l'instance d'objet est référencé en utilisant la variable cela. Cette fois, lorsque method2 est appelé, il ne fait pas exception et la propriété instancié a une valeur de 40. Si vous êtes familier avec JavaScript et ont déjà instancié quelques objets, puis la syntaxe précédente instanciation attend probablement un peu bizarre. La manière classique de l'instanciation d'un objet en JavaScript est comme suit: MyObject fonction () () var cls = new MyObject (); Cette approche implique la définition d'une fonction où la fonction est un constructeur de l'objet de MyObject type. Quand les programmeurs MyObject est instancié, la notation est très similaire à l'instanciation d'un type en Java et C #, et donc qui instancier les types figurant dans JavaScript jamais question de savoir ce qui se passe réellement. Une explication plus précise de la façon dont un objet en JavaScript est défini, c'est quand la variable inst a été utilisé pour instancier un objet. Plus précisément, un objet est construit en convertissant une fonction dans un objet, et la fonction associée avec le nouveau mot clé est le constructeur. En manipulant les classes JavaScript, gardez les points suivants à l'esprit: • Il est possible de créer des types de JavaScript sans utiliser le nouveau mot clé. Toutefois, la création JavaScript premières "objets" a l'inconvénient d'avoir à traverser de référence «l'objet» par exemple avec la fonction. • Les objets JavaScript sont des types que vous pouvez affecter dynamiquement, ce qui permet de mettre en œuvre basé sur des prototypes de programmation, où le comportement du type est déterminé à l'exécution. • Les recettes haut dans cet article montre comment manipuler les objets de fonction, une technique qui s'applique également à JavaScript types d'objets. • La base de tous les objets JavaScript est le type Object. • Lorsque vous utilisez le nouveau mot clé pour instancier un type, la propriété prototype associé à l'objet fonction peut être utilisée pour définir le comportement qui s'applique à toutes les instances d'un type particulier. un article présenté par Sonja Lande Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite. Important: Cet article «Définition des classes et à étendre les« a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.
|
|||||
| Online: 257 users browsing the articles directory |
|
|