Que la plupart des gens faire est d'utiliser les fonctions de constructeur, comme suit:
function MyClass(a, b) {
// Private instance properties
var x = "secret";
var y = "also secret";
// Public instance properties
this.a = a;
this.b = b;
// "Privileged" methods; can access private and public properties
this.foo = function() {
return x + " " + this.a;
};
}
// "Public" methods; cannot access private properties
MyClass.prototype.bar = function() {
return this.a + " " + this.b;
};
// Public shared properties; not recommended:
MyClass.prototype.w = "stuff";
// Static methods
MyClass.baz = function() {
return "i am useless";
};
Vous pouvez ensuite utiliser cette fonction constructeur comme ceci:
var instance = new MyClass("hi", "Meen");
asssert.equal(instance.foo(), "secret hi");
assert.equal(instance.bar(), "hi Meen");
assert.equal(MyClass.baz(), "i am useless");
var also = new MyClass("hi", "Raynos");
instance.w = "more stuff";
assert.equal(also.w, "more stuff");
Si vous voulez faire de l'héritage, vous ferait quelque chose comme:
function Inherited(a) {
// apply parent constructor function
MyClass.call(this, a, "Domenic");
}
Inherited.prototype = Object.create(MyClass.prototype);
var inherited = new Inherited("hello there good chap");
assert.equal(inherited.a, "hello there good chap");
assert.equal(inherited.foo(), "secret hello there good chap");
assert.equal(inherited.bar(), "hello there good chap Domenic");
Oh mon dieu, n'allez pas pousser votre style de prototypes-comme-classes préféré récemment-découvert sans au moins un certain avertissement ... @Meen ce que fait Raynos est fait par très peu de gens, et est le résultat d'un article C'est devenu populaire au cours du dernier mois. vous ne verrez pas beaucoup de code JavaScript dans la nature comme ça. – Domenic
@Domenic C'est pratiquement la même chose. 'Klass.constructor.prototype === Klass' &&' Constructeur.prototype.constructor === Constructeur'. C'est une question de style personnel, et je trouve que c'est beaucoup plus lisible et élégant que de se fier aux constructeurs, '.prototype' et' new'. Et en fait, ce que je fais reflète les modèles d'objets es.next et les classes es.next, la communauté ES va s'éloigner des constructeurs. Et en dehors de "Ce n'est pas mon choix de style", y a-t-il quelque chose qui ne va pas dans les constructions que je montre? – Raynos
Ce n'est pas du tout la même chose. Ce style sépare l'initialisation de la création via ce truc du constructeur, ce qui est une différence substantielle, et plus important encore, ce style est utilisé par très peu de gens sur la planète. Les opinions subjectives sur la lisibilité et l'élégance sont dépassées par le fait que l'OP souhaite que son code soit lisible par quelqu'un qui n'a pas lu le billet de Rauschmayer. – Domenic