9

このコードが機能する理由...

var message = {
    texts: {
        text1: 'Hello',
        text2: 'World'
    },
    greet: function() {
        console.log(this.texts.text1 + ' ' + this.texts.text2 + '!');
    }
}
message.greet();

...しかし、これは違いますか?

var message = {
    texts: {
        text1: 'Hello',
        text2: 'World'
    },
    both: this.texts.text1 + ' ' + this.texts.text2 + '!',
    greet: function() {
        console.log(this.both);
    }
}
message.greet();

「両方が定義されていません」というエラーが表示されます。ここで何が欠けていますか?何か問題がありthis.bothますか? オブジェクトリテラルに関しては、私はまったくの初心者です

4

4 に答える 4

1

あなたの誤解は次の行にあります。

both: this.texts.text1 + ' ' + this.texts.text2 + '!',

関数として使用して、次のような値を返すことができます。

both: function(){ return this.texts.text1 + ' ' + this.texts.text2 + '!'; } ,

そして最後に

 greet: function() {
        console.log(this.both());
    }
于 2013-06-21T12:39:22.943 に答える
1

挨拶を呼び出すとき、「this」は親オブジェクト、メッセージになります。これは、実際にメッセージ オブジェクトを構築している場合には当てはまりません。次のようなものを書くことができます:

var Message = function () {
    this.texts = {
        text1: 'Hello',
        text2: 'Word'
    }
    this.both = this.texts.text1 + ' ' + this.texts.text2 + '!';
}

Message.prototype.greet = function () {
    console.log(this.both);
}

message = new Message();
message.greet();
于 2013-06-21T12:42:04.740 に答える