¿Cómo crear un nuevo object en JavaScript?

¿Por qué esto no funciona?

var sheep = function(options){ this.options = {sizes: 100, eat: 100, colors: 'white', running: function () { return this.sizes + this.eat; } } }; var blacksheep = new sheep({colors:'black'}); alert('blackcsheep color is ' + blacksheep.colors);//error undefined alert('blackcsheep color is ' + blacksheep.options.colors);// it return white alert('blackcsheep running is ' + blacksheep.running());//error 

La syntax

 var sheep = {sizes:100, eat:100, colors:'white',running:function(){ return this.sizes+this.eat; } }; 

es un object literal. Define una instancia de un object, pero no la class que lo define. Por lo tanto, no hay forma de "actualizar" otra instancia del object.

Eche un vistazo a la funcionalidad de extend de jQuery:

 var blacksheep = { } $.extend(blacksheep, sheep, { color: black }); 

Esto copyrá todas las properties de las sheep en blacksheep , luego fusionará el tercer parámetro en blacksheep , logrando efectivamente lo que desea.

Para hacer otra oveja negra basada en ovejas, en este escenario puedes hacer (usando jQuery):

 var blacksheep = $.extend(sheep, { color: 'black' }); 

Puedes crear un object de oveja como este.

  function Sheep(sizes,eat,colors){ this.sizes = sizes; this.eat = eat; this.colors = colors; this.running = function (){ return this.sizes+this.eat; } } 

Alternativamente, puedes escribir así también

  function Sheep(sizes,eat,colors){ this.sizes = sizes; this.eat = eat; this.colors = colors; } sheep.prototype.running = function(){ return this.sizes + this.eat; } 

var sheep1 = oveja nueva ('100', '100', 'blanca');

 var sheep = function(){ this.sizes = 100; this.eat = 100; this.colors = 'white'; this.running = function(){ return this.sizers + this.eat; } } 

No declaras objects en JavaScript de la misma forma que lo haces en lenguajes fuertemente tipados. Usted declara objects usando funciones como esta:

 function sheep() { this.color = "white"; this.size = 200; this.speed = 100; this.running = function () { return "the sheep is running!"; }; } var blacksheep = new sheep(); alert('sheep size is ' + blacksheep.size); alert('sheep running is ' + blacksheep.running());​ 

Su nuevo object no funciona porque está creando un nuevo object con un subobject llamado options . options contiene todos tus methods. Como tal, solo la segunda de estas tres líneas que proporcionó dará la respuesta correcta:

 alert('blackcsheep color is ' + blacksheep.colors); alert('blackcsheep color is ' + blacksheep.options.colors); // Only this one correctly references `options`. alert('blackcsheep running is ' + blacksheep.running()); 

en tu caso, las ovejas ya son un object que no puedes crear como object de un object. puedes usar directamente ese object con propiedad.

Pero creo que quieres algo como esto

var sheep = {sizes: 100, eat: 100, colors: 'white', running: function () {return this.sizes + this.eat; }}; Object.defineProperty (sheep, 'colors', {value: 'black', writeable: true});

Gracias

Javascript es un prototipo basado no basado en classs. No usa classs y también está orientado a objects.

 var whitesheep =new sheep("100","100","white","running"); var blacksheep =new sheep("100","100","black","running");