2

Javascriptで次のことをどのように達成しますか

1) var MyObject={
2)    tableView:true,
3)    chartView:!(this.tableView)
4) }

行番号3のコードが機能していません。その行の何が問題になっていますか?

私が基本的にやりたいのは、コードからtableViewが設定されるたびに、「chartView」を「tableView」の反対に設定することです。

4

3 に答える 3

4

オブジェクトを作成中なので、thisはそのオブジェクトにバインドされていません。chartViewさらに、常に反対の評価をしたいのでtableView、後者がさらに変更されたとしても、関数はより良いアプローチになります。

var MyObject = {
    tableView: true,
    chartView: function() {
        return !this.tableView;
    }
};

今、あなたはすることができます:

var chartView = MyObject.chartView();  // false.
MyObject.tableView = false;
chartView = MyObject.chartView();      // true.
于 2012-04-06T09:30:52.633 に答える
1

これを使用して、オブジェクトリテラルのプロパティでオブジェクトを参照することはできません。これは、そのオブジェクトのメソッドである関数内で使用できます。

var MyObject = {
  tableView: true,
  chartView: function () {
    return !this.tableView;
  }
}
于 2012-04-06T09:32:16.130 に答える
0

あなたの要件に基づいて、これも答えかもしれません、

 var MyObject = {
      view : function(bool){
         this.tableView = bool;
         this.chartView = !(bool); 
      }
      tableView: true,
      chartView: false
    } 

    MyObject.view(false)

    console.log(MyObject.tableView);     // Outputs false
    console.log(MyObject.chartView)      // Outputs true

このようにすると、1回の関数呼び出しでchartViewのtableViewの反対が常に発生します。

于 2012-04-06T09:57:37.743 に答える