Tengo una matriz de objetos existentes definidos con JSON. Obviamente, los objetos son del tipo Object. ¿Cómo los asocio con un tipo de objeto personalizado para darles una funcionalidad específica?Cambiar el tipo de un objeto en JavaScript
Respuesta
La forma en que va a trabajar en todos los navegadores es o bien aumentar cada elemento de la matriz con las propiedades y métodos que desea, o pasar el objeto a un constructor y crear un nuevo objeto en función de la edad objeto de propiedades y métodos.
O si no se preocupan por IE:
var obj = {
name : "Jeremy"
};
function CustomType() {
this.name = this.name || "someValue";
this.greeting = "Hi";
}
CustomType.prototype.sayHi = function() {
alert(this.greeting + ", " + this.name);
};
obj.__proto__ = CustomType.prototype;
obj.constructor.call(obj);
obj.sayHi();
Me importa IE, y fui con su sugerencia, creando un método que modifica el objeto pasado y lo devuelve a la persona que llama. Estoy demasiado acostumbrado a usar "bendecir" en Perl y ser capaz de modificar objetos a mi antojo. – Ray
No creo que haya ninguna forma de cambiar el tipo de objeto una vez creado. Afortunadamente, probablemente no necesites cambiar la clase de tus objetos; probablemente estés satisfecho con darles a los objetos algunos métodos nuevos y otras funcionalidades. (La única diferencia real es qué pasaría si CAMBIÓ la clase, y la mayoría de las personas no cambian de clase mientras se está ejecutando el código.)
Voy a trabajar un ejemplo para usted. En primer lugar, voy a crear un simple objeto para representar los objetos JSON que tiene:
var myobj = new Object()
myobj.name = "Fred"
entonces voy a crear una cierta clase que le gustaría ser capaz de asignar a myobj
:
function Speaker() {
this.speak = function() {
window.alert("Hello, " + this.name);
}
}
Este nueva clase Speaker
tiene algunas funciones útiles: se puede utilizar el método speak()
a la salida de información útil:
var s = new Speaker()
s.name = "Sally"
s.speak()
Ejecución que dio m e el mensaje "Hola, Sally". Lamentablemente, no desea un objeto NUEVO (como s
) con esta funcionalidad, desea que el objeto existente (myobj
) lo tenga. Así es cómo se hace eso:
myobj.speak = s.speak
Ahora cuando yo haga esto:
myobj.speak()
veo el mensaje "Hola , Fred".
Para resumir: cree un objeto que haga lo que desee. Copie todos los métodos (y cualquier variable auxiliar) en su nuevo objeto. Excepto por algunos usos inusuales de la herencia, esto hará que su nuevo objeto se comporte como lo desee.
Si desea utilizar un método específico en ellas, puede usar apply/call.
O puede copiar los métodos para su objeto personalizado.
function Object1() {
this.aValue = "10";
}
function CustomObject() {
this.customValue = "6";
}
function convertToCustom(obj) {
var custom = new CustomObject();
for(var key in obj) {
custom[key] = obj[key];
}
return custom;
}
var obj = new Object1();
var custom = convertToCustom(obj);
console.log(custom.customValue); // <- 6
console.log(custom.aValue); // <- 10
Como complemento a la respuesta de Jeremy, podría utilizar Object.create en vez de jugar directamente con proto. También necesitarás una función de "extensión".
Así que, dado el ejemplo de Jeremy, usted podría tener algo como esto:
var obj = {
name : "Jeremy"
};
function CustomType() {
}
CustomType.prototype.init = function(){
this.name = this.name || "someValue";
this.greeting = "Hi";
return this; //let's make it fluent
}
CustomType.prototype.sayHi = function() {
console.log(this.greeting + ", " + this.name);
};
function extend(obj, props) {
for(prop in props) {
if(props.hasOwnProperty(prop)) {
obj[prop] = props[prop];
}
}
return obj; //let's make it fluent
}
obj = extend(Object.create(CustomType.prototype), obj).init();
obj.sayHi();
Si usted no necesita constructor, que puede hacer como:
Object.assign(new CustomType, {});
- 1. tipo de valor tipo de objeto de referencia en javascript
- 2. Tipo de Javascript de objeto personalizado
- 3. javascript: diferentes constructores para el mismo tipo de objeto
- 4. ¿Por qué el tipo de javascript siempre devuelve "objeto"?
- 5. ¿Cómo verificar el tipo de un objeto en C++/CLI?
- 6. Cambiar el valor de un tipo de datos primitivo envuelto
- 7. Cambiar el tipo de medio css en el navegador
- 8. Cómo clonar un objeto Date en JavaScript
- 9. var vs esto en el objeto Javascript
- 10. Encontrar el tipo de un objeto en C++
- 11. Buscar un objeto JavaScript
- 12. Exactamente clonar un objeto en javascript
- 13. ¿Cómo cambiar un objeto serializado?
- 14. Cambiar el tipo de cursor para un documento html desde javascript
- 15. ¿Cómo comparar el tipo de objeto con un tipo genérico, irrelevante para el argumento genérico?
- 16. JavaScript Cursor Cambiar (y cambiar de nuevo)
- 17. Objeto NodeList en javascript
- 18. objeto JavaScript para objeto JavaScript
- 19. ¿Cómo cambiar el texto de un elemento span en JavaScript
- 20. reducir duplicado en un objeto de javascript
- 21. ¿Clonación de un objeto JavaScript?
- 22. cómo emitir dinámicamente un objeto de tipo string a un objeto de tipo T
- 23. Ordenación de un objeto JSON en Javascript
- 24. ¿Cómo convertir un objeto en su tipo?
- 25. Javascript empujando el objeto en el arreglo
- 26. Cambiar el tipo de propiedad en la clase que implementa la interfaz con la propiedad tipo de objeto
- 27. ¿Cómo cambiar la clase de un objeto dinámicamente en C#?
- 28. javascript cómo encontrar el número de hijos en un objeto
- 29. ¿Cómo sobrecargar el constructor de un objeto en JS (Javascript)?
- 30. Cambiar el tipo de un elemento de entrada usando jquery
si ese objeto tiene atributos adicionales/métodos, ¿qué necesitas más? ¿Podría darnos algún ejemplo? – mykhal
.. quiero decir, ¿ya tiene definidos esos tipos de objetos personalizados o quiere saber cómo hacerlo? – mykhal