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 });

これにより、のすべてのプロパティがにコピーsheepされblacksheep、3番目のパラメータがにマージされて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;    
}

var sheep1 = 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すべてのメソッドが含まれています。そのため、あなたが与えたこれらの3行の2番目だけが、正しい応答を返します。

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

あなたの場合、羊はすでにオブジェクトであり、オブジェクトのオブジェクトを作成することはできません。そのオブジェクトをプロパティで直接使用できます。

しかし、私はあなたがこのようなものが欲しいと思います

var シープ={サイズ:100、食べる:100、色:'白'、実行中:関数(){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 に答える