Es fácil pasar variables a un nuevo objeto en el momento en que se instancia. Por ejemplo, el código a continuación funciona perfecto.

var CreatureStory, zombie;
	
function CreatureStory(species, action) {
  this.species = species;
  this.action = action;
  this.story = function() {
  console.log('The ' +this.species +' is about to ' +this.action +'.');
  }
}
	
zombie = new CreatureStory('zombie', 'walk');  //variables passed in here.
	
zombie.story();  // But how would I pass them in here?

Pero, ¿qué pasa si necesito pasarlos al objeto después de que se creó? Por ejemplo, el siguiente código no obtiene las variables en el objeto ya creado. Sus valores se muestran como undefined.

zombie.story('zombie', 'walk');
0
DR01D 30 oct. 2017 a las 20:53

7 respuestas

La mejor respuesta

Si su función no acepta ningún parámetro, no puede agregarle parámetros. Usted cambia la función para aceptar parámetros; o cambiar los atributos del objeto antes de llamar a story

Como:

var CreatureStory, zombie;
	
function CreatureStory(species, action) {
  this.species = species;
  this.action = action;
  this.story = function() {
  console.log('The ' +this.species +' is about to ' +this.action +'.');
  }
}
	
zombie = new CreatureStory('zombie', 'walk');
zombie.action = 'run';
zombie.story();  // the zombie now will run
1
Jackowski 30 oct. 2017 a las 17:58

Después de su creación, puede asignar valores al objeto de esta manera: zombie.action = "sit"

Thien zombie.story () devolverá "Este zombie está a punto de sentarse"

1
freshop 30 oct. 2017 a las 17:58

Creo que deberías intentar entender la herencia prototípica en JavaScript:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

Es esencial comprender el modelo de herencia prototípico antes de escribir código complejo que lo utilice. Además, tenga en cuenta la longitud de las cadenas de prototipos en su código y divídalas si es necesario para evitar posibles problemas de rendimiento. Además, los prototipos nativos nunca deben extenderse a menos que sea por razones de compatibilidad con las nuevas funciones de JavaScript.

0
nocarrier 30 oct. 2017 a las 18:00

Debe pasar los parámetros al método story.

var CreatureStory, zombie;
	
function CreatureStory(species, action) {
  this.species = species;
  this.action = action;
  this.story = function(species, action) { // Like this !!!!
     this.species = species;
     this.action = action;
     console.log('The ' +this.species +' is about to ' +this.action +'.');
  }
}
	
zombie = new CreatureStory('zombie', 'walk');  //variables passed in here.
	
zombie.story('monster', 'sleep');  // But how would I pass them in here?

Además, actualizo las propiedades species y action para reflejar los nuevos valores

2
Yoiki 30 oct. 2017 a las 18:04

Cambie this.species y this.action a var species y var action

var CreatureStory, zombie;
	
function CreatureStory(species, action) {
  var species = species;
  var action = action;
  this.story = function() {
  console.log('The ' +species +' is about to ' +action +'.');
  }
}
	
zombie =  new CreatureStory('zombie', 'walk');  //variables passed in here.
	
zombie.story();  // But how would I pass them in here?
1
Ram Segev 30 oct. 2017 a las 18:08

Si entiendo correctamente, actualice su función this.story como se indica a continuación:

var CreatureStory, zombie;

function CreatureStory(species, action) {
  this.species = species;
  this.action = action;
  this.story = function(species, action) {
    species = species || this.species;
    action = action || this.action;
    console.log('The ' + species +' is about to ' + action +'.');
  }
}

zombie = new CreatureStory('zombie', 'walk');  //variables passed in here.

zombie.story();
0
Anuj 30 oct. 2017 a las 17:59
var CreatureStory, zombie;

function CreatureStory(species, action) {
  this.species = species;
  this.action = action;
  this.story = function(speciesNew, actionNew) {
  this.species=speciesNew;
  this.action=actionNew
  console.log('The ' +this.species +' is about to ' +this.action +'.');
  }
}

zombie = new CreatureStory('zombie', 'walk');  //variables passed in here.

zombie.story('zombieNew', 'walkNew');  // But how would I pass them in here?
0
mo.dhouibi 30 oct. 2017 a las 18:01