3

次のコードを機能させようとしています。store 変数には無名オブジェクトが割り当てられるため、関数呼び出しを使用して "data" プロパティが設定されます。この設定は、他のオブジェクトのプロパティ「masterData」の内容も設定する必要があります。「this」キーワードは、作成中の匿名オブジェクトを参照すると思っていましたが、間違っています...

    var store = {

        masterData : [],

        revert: function() {

            this.data = shallowCopy(this.masterData);
        },

        data: (function() {

            var overviewData = getOverviewData();
            this.masterData = overviewData;
            return chartData;

            }).call(),
    };

「元に戻す」プロパティも参照してください。オブジェクトのデータ プロパティの内容のコピーを作成する関数が与えられます。

「this」は DOMWindow オブジェクトを返すので、何を使用する必要がありますか?

4

4 に答える 4

2

私は同じ問題を抱えており、スコープを関数で送信するだけで解決しました。

    var self = this;
    setInterval( yourFunction(self), 1000);

    yourFunction:function( self )
    {
        console.log(this);
        console.log(self);
    }

「これ」をログに記録すると、それはDOMを参照し、自己はどこから来たのかを参照しています。これが役立つことを願っています!:)

編集: Data 内で masterData を設定する代わりに、Data の作成後に Master データを設定します。

var store = {

    masterData : [],

    revert: function() {

        this.data = shallowCopy(this.masterData);     //Here is where you create data
        masterData = this.data.overviewData;       //set the masterData
    },

    data: (function() {

        var overviewData = getOverviewData();
        return chartData;

        }).call(),
};

私はこれがうまくいくはずだと思います、そうでなければ申し訳ありません:)

于 2012-04-26T10:44:18.820 に答える
2

オブジェクトが定義される前にdata関数が呼び出されています。thisオブジェクトが存在する前にオブジェクトのエイリアスにはなりません。有効期間が短いプライベート変数でコンストラクター関数を使用できます。

var getOverviewData = function () { return "I'm overview data!" }
var chartData = "I'm chart data!"

var store = new function () {
  var _masterData
  this.revert = function() {
    this.data = shallowCopy(this.masterData)
  }
  this.data = (function() {
    _masterData = getOverviewData()
    return chartData
  }).call()
  this.masterData = _masterData
}()

console.log(store)
// { revert: [Function],
//   data: 'I\'m chart data!',
//   masterData: 'I\'m overview data!' }
于 2012-04-26T11:04:17.743 に答える
1

フローイングラインを変更する

}).call(),

})()

または、本当にメソッドを使用したい場合call

 }).call(store)
于 2012-04-26T11:15:31.360 に答える