Esto es maravilloso solución la creación de un objeto a partir de un literal, no desde la función constructora
En primer lugar, si quieres jumps
miembro para estar contenido en el objeto, en lugar de ser simplemente una variable local en el constructor, entonces usted necesita this
palabra clave.
function Rabbit() {
this.jumps = "yes";
};
var rabbit = new Rabbit();
alert(rabbit.jumps); // not undefined anymore
Y ahora usted puede fácilmente acceder ahora a jumps
públicamente la forma en que quería:
rabbit.jumps = 'no';
alert(rabbit.jumps); // outputs 'no'
Pero aún si se crea otro objeto conejo que tendrá inicialmente 'sí' como se define en el constructor, a la derecha ?
var rabbit2 = new Rabbit();
alert(rabbit.jumps); // outputs 'no' from before
alert(rabbit2.jumps); // outputs 'yes'
Lo que puedes hacer es crear un conejo a partir de un objeto de conejo predeterminado. Los conejos de concreto siempre tendrán el valor predeterminado del objeto Rabbit por defecto incluso cuando lo cambies sobre la marcha a menos que hayas cambiado el valor en el objeto concreto de conejo (implementación). Esta es una solución diferente a la de @Juan Mendes, que probablemente sea la mejor, pero puede abrir otro punto de vista.
Rabbit = {jumps : 'yes'}; // default object
rabbit = Object.create(Rabbit);
Rabbit.jumps = 'no';
rabbit2 = Object.create(Rabbit);
console.log(rabbit.jumps); // outputs "no" - from default object
console.log(rabbit2.jumps); // outputs "no" - from default object
// but...
rabbit.jumps = 'yes';
Rabbit.jumps = 'unknown';
console.log(rabbit.jumps); // outputs "yes" - from concrete object
console.log(rabbit2.jumps); // outputs "unknown" - from default object
Su segundo código dice que un conejo no salta, lo que da como resultado false, por lo tanto, el error - prueba 'this.jumps = "yes"' – wheresrhys
@wheresrhys Todas las cadenas no vacías (es decir, las cadenas con longitud mayor que cero) evaluar a verdadero en JavaScript; incluso '" false "', más que, entonces, '" no "' :) – Max