Javascript extiende el prototipo del objeto pero mantiene el prototipo antiguo
Frecuentes
Visto 124 veces
-1
Necesito extender el prototipo de un objeto sin eliminar su prototipo actual
var obj = (function() {
function Obj(){
}
Obj.prototype.func1 = function() {}
extend = {
func2: function(){}
}
Obj.prototype = extend;
return Obj;
}());
¿Cómo hago esto y mantengo func1
?
3 Respuestas
2
Es tan simple como usar un bucle for-in para copiar propiedades de su existente extend
objeto en Obj.prototype
:
for (var key in extend)
// make sure it's actually a direct property of extend
if (extend.hasOwnProperty(key))
// copy over value from extend into prototype
Obj.prototype[key] = extend[key];
Respondido el 03 de diciembre de 13 a las 13:12
1
Obj.prototype.func2 = function() {}
... Simplemente siga agregando métodos al prototipo existente.
Respondido el 03 de diciembre de 13 a las 13:12
1
Si desea "importar" propiedades de otro objeto, puede crear una función "extender":
function extend(o1, o2) {
for (var key in o2)
if (o2.hasOwnProperty(key))
o1[key] = o2[key];
return o1;
}
Entonces:
extend(Obj.prototype, extend);
Respondido el 03 de diciembre de 13 a las 13:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript or haz tu propia pregunta.
Pero eso es lo que quiero evitar - php_nub_qq
@php_nub_qq ¿por qué? ¿Cuál es el problema que quieres evitar? ¿Qué tiene de malo agregar más funciones al objeto prototipo? - Puntiagudo
@php_nub_qq Su publicación decía "Necesito extender el prototipo de un objeto sin eliminar su prototipo actual". Eso es lo que hace... Agrega un método al prototipo sin eliminar el prototipo actual ni nada en él. - hablando
porque sigo repitiendo
Obj.prototype
y mis funciones pueden llegar a ser un gran número, eso es solo pérdida de espacio. Sé que puedo poner todas las funciones en un objeto y luego asignarlo al prototipo, pero la pregunta es más sobre el principio, ¿por qué no puedo extender el objeto como enphp
manteniendo todos los métodos no sobrescritos? - php_nub_qqSu pregunta fue un poco confusa. Puedes, mira las otras respuestas. JavaScript usa herencia de prototipo, no herencia clásica, por lo que no es fácil compararlo con lenguajes que usan herencia clásica. JavaScript tiene delegación de comportamiento que es lo que permite el prototipo del sistema. De hecho, es muy poderoso y te permite hacer algunas cosas OO realmente agradables sin intentar emular clases. - hablando