Para conservar el ancho de banda aquí está el enlace a my answer on "How can I emulate “classes” in JavaScript? (with or without a third-party library)". Contiene referencias adicionales y ejemplos.
La respuesta corta: el corazón de Prototypal de JavaScript OO es la delegación. En este estilo de programación orientada a objetos diferentes objetos de la misma "clase" puede delegar el manejo de métodos y propiedades para el mismo prototipo (por lo general un tercer objeto):
var foo = {
property: 42,
inc: function(){
++this.counter;
},
dec: function(){
--this.counter;
}
};
// Note: foo does not define `counter`.
Vamos a crear un constructor de objetos con foo como prototipo . Efectivamente, todo lo no manejado será delegado a foo.
var Bar = function(){
this.counter = 0;
};
Bar.prototype = foo; // This is how we set up the delegation.
// Some people refer to Bar (a constructor function) as "class".
var bar = new Bar();
console.log(bar.counter); // 0 --- Comes from bar itself
console.log(bar.property); // 42 --- Not defined in bar, comes from foo
bar.inc(); // Not defined in bar => delegated to foo
bar.inc();
bar.dec(); // Not defined in bar => delegated to foo
// Note: foo.inc() and foo.dec() are called but this === bar
// that is why bar is modified, not foo.
console.log(bar.counter); // 1 --- Comes from bar itself
Definamos inc()
directamente en la barra:
bar.inc = function(){
this.counter = 42;
};
bar.inc(); // Defined in bar => calling it directly.
// foo.inc() is not even called.
console.log(bar.counter); // 42 --- Comes from bar
Configuración de la cadena de herencia simple:
var Baz = function(){
this.counter = 99;
};
Baz.protype = new Bar();
var baz = new Baz();
console.log(baz.counter); // 99
baz.inc();
console.log(baz.counter); // 100
console.log(baz instanceof Baz); // true
console.log(baz instanceof Bar); // true
console.log(baz instanceof Object); // true
aseado, eh?
"clases de idiomas de orientación de objetos": ¿puede proporcionar un idioma de ejemplo o dos? "OO tradicional": ¿puede proporcionar un idioma de ejemplo o dos? –
Asumo: prototipo OO - Javascript, OO tradicional - la mayoría de los otros lenguajes OO. Consideraría a Python como OO tradicional (aunque es probable que pueda hacerlo actuar como un prototipo de lenguaje OO si lo desea). – Dan
@ Dan: suposición interesante: el hecho de que no sea obvio significa que el que pregunta debe proporcionar las definiciones o ejemplos. De lo contrario, la pregunta demasiado vaga para responder. –