2012-04-06 3 views
2

Как достичь следующей вещи в JavascriptКак автоматически присвоить значение другого ключа в зависимости от значения некоторого другого ключа в объекте

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

код на номер строки 3 не работает. Что не так в этой строке?

Что я в основном хочу сделать, это установить «chartView» напротив «tableView», когда tableView устанавливается из кода.

ответ

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. 
+0

Большое спасибо .. – furiabhavesh

1

Вы не можете использовать это для ссылки на объект в свойствах литерала объекта. Вы можете использовать эту функцию внутри функции, которая является методом этого объекта:

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

О да .. Я забыл эту концепцию использования «этого» внутри функции. Спасибо за напоминание. – furiabhavesh

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 

Таким образом, вы всегда будете иметь противоположное Tableview в chartView с одним вызовом функции.

Смежные вопросы