Estoy tratando de crear una aplicación de JavaScript con una base de datos de documentos que pueda almacenar y recuperar datos de objetos (proporcionados como API) sin miembros de funciones.
Ahora tengo una clase que tiene muchas propiedades y algunas funciones como prototipo.
Project: function(){ this.a= 'abc'; this.f = function(){ console.log(this.a); } } //object from the databse p0 = { a: 'abc'; }Quiero convertir un objeto simple en un objeto con función de miembro utilizable.
Cuando intento algo como esto, no funcionará:
// It won't work: // for it needs a map that have many properties such as writable etc. var pobj = Object.create(new Project(), p0);Traté de buscar esta pregunta con diferentes palabras clave en Internet, pero no encontré ninguna relacionada.
La función que probablemente quiera usar es Object.assign .
Entonces puede usar Object.create para crear una instancia de la clase (usando el prototipo), luego asignar los valores de los datos a la nueva instancia y luego llamar al constructor (asegúrese de no anular los valores).
function Project() { if (this.foo === undefined) this.a = 'foobar'; return this; } Project.prototype.print = function() { console.log(this.foo); }; var data = { foo: 'bar' }; var obj = Object.create(Project.prototype); // empty instance obj = Object.assign(obj, data); // copy data obj = obj.constructor(); // start constructor obj.print(); Alternativamente, podría crear una nueva instancia usando el new operador y luego asignar los datos.
function Project() { this.a = 'foobar'; return this; } Project.prototype.print = function() { console.log(this.foo); }; var data = { foo: 'bar' }; var obj = Object.assign(new Project(), data); obj.print(); Nota no relacionada Por lo general, es una buena idea declarar funciones públicas que no requieren cierre fuera del cuerpo de la función usando class.prototype.functionName = function(){...}