6

为什么这不起作用?

    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
4

7 回答 7

3

语法:

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

是一个对象字面量。它定义了一个对象的实例,而不是定义它的类。因此,没有办法“新建”对象的另一个实例。

看看 jQuery 的extend功能:

var blacksheep = {
}

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

这将复制sheepinto的所有属性blacksheep,然后将第三个参数合并到blacksheep,有效地实现您想要的。

于 2012-12-04T06:45:20.440 回答
1

要基于绵羊制作另一个害群之马,在这种情况下,您可以执行以下操作(使用 jQuery):

var blacksheep = $.extend(sheep, { color: 'black' });
于 2012-12-04T06:44:41.517 回答
1

你可以像这样创建一个绵羊对象。

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

    }

或者你也可以这样写

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

varsheep1 = new Sheep('100','100','white');

于 2012-12-04T06:44:51.553 回答
1
var sheep = function(){
    this.sizes = 100;
    this.eat = 100;
    this.colors = 'white';
    this.running = function(){
        return this.sizers + this.eat;
    }
}
于 2012-12-04T06:44:54.567 回答
1

在 JavaScript 中声明对象的方式与在强类型语言中声明的方式不同。您可以使用如下函数声明对象:

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());​

您的新对象不起作用,因为您正在创建一个带有名为 的子对象的新对象optionsoptions包含您的所有方法。因此,只有您给出的这三行中的第二行会给您正确的响应:

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());
于 2012-12-04T06:58:29.583 回答
0

在您的情况下,羊已经是一个对象,您无法创建对象的对象。您可以直接将该对象与属性一起使用。

但我认为你想要这样的东西

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

谢谢

于 2012-12-04T07:16:05.343 回答
-1

Javascript 是基于原型的,而不是基于类的。它不使用类并且也是面向对象的。

var whitesheep =new sheep("100","100","white","running");
var blacksheep =new sheep("100","100","black","running");
于 2012-12-04T06:48:03.547 回答