5

私は、javascript でその場しのぎのクラスを作成する多くの方法を読みました。それぞれにさまざまな変数を持つアイテムの巨大なリストを作成しようとしています。このリストから特定のオブジェクトのプロパティを呼び出せるようにする必要があります。次のコードはコンパイルされますが、9 行目で items.yspeed1.name にアクセスしようとすると、「undefined」という名前のボタンが作成されます。このようにJavaScriptで関数の変数にアクセスする方法がわかりません。

var itemslist = function(){
    this.yspeed1 = function(){
        this.name = 'Yellow Upgrade';
        this.price = 50;
    }
    this.yspeed2 = function(){
        this.name = 'Blue Upgrade';
        this.price = 25;
    }
}

var newitem = document.createElement('button');
newitem.innerHTML = items.yspeed1.name;
shop.appendChild(newitem);
4

4 に答える 4

2

まあ、まず第一に、とにかくそれを呼び出さなければならないのでyspeed1functionこれはあなたが探しているようなものかもしれないと思います.

var itemslist = function(){
    this.yspeed1 = {
        name: 'Yellow Upgrade',
        price: 50
    }
}

これは 1 つの方法にすぎません。それ以外は、作成する必要があります

new items.yspeed1();
于 2013-09-17T19:07:12.377 に答える
1

状態を持つ再利用可能な構造を定義する場合、JS でクラスを使用します。つまり、クラスの複数のコピー (インスタンス) がある場合があります。

あなたが持っているのは、プロパティを持つ単一のオブジェクト (単一のインスタンス) の定義だけです。そのため、代わりにその Javascript 構成を使用します。

var itemslist = {
    yspeed1: {
        name: 'Yellow Upgrade'
        , price: 50
    }
    , yspeed2: {
        name: 'Blue Upgrade'
        , price:  25
    }
}

これで、yspeed1 と yspeed2 という 2 つのプロパティを持つ 1 つのオブジェクトができました。そして、それらはそれぞれ独自の名前と価格のプロパティを持っています。

そのオブジェクトを展開したい場合は、追加するだけです。itemslist.yspeed3 = { hello: 'world' };

于 2013-09-17T19:09:40.413 に答える
0

クラスベースのアプローチを使用したい場合は、プロトタイプを使用するアプローチを次に示します

アイテムクラス:

function YSpeedItem(name, price)
{
  this.name = name;
  this.price = price;
}

YSpeedItem.prototype.getName = function()
{
  return this.name;
}

YSpeedItem.prototype.getPrice = function()
{
  return this.price;
}`

メインコード

var yspeed1 = new YSpeedItem("Yellow Upgrade", 50);
var yspeed2 = new YSpeedItem("Blue Upgrade", 25);
itemsList = [];
itemsList.push(yspeed1);
itemsList.push(yspeed2);

var newitem = document.createElement('button');
newitem.innerHTML = items[0].getName;
shop.appendChild(newitem);

詳細はこちらhttp://www.phpied.com/3-ways-to-define-a-javascript-class/

于 2013-09-17T19:23:51.257 に答える
0

「クラス」が便利な場面もありますが、ここでは単純なオブジェクトで済むと思います。

var items = {}
items.yspeed1 = {}
items.yspeed1.name = 'Yellow Upgrade';
items.yspeed1.price = 50;
items.yspeed2 = {};
items.yspeed2.name = 'Blue Upgrade';
items.yspeed2.price = 25;

var newitem = document.createElement('button');
newitem.innerHTML = items.yspeed1.name;
shop.appendChild(newitem);
于 2013-09-17T19:09:25.680 に答える