我正在研究一个JavaScript对象,并且在其中声明了很多变量。我想要做的是引用父对象的另一个子对象。给出以下对象:
var clusters = {
auxiliars: {
environment : "Development",
local_storage_key : "Cluster",
iqns_class : ".iqn",
iqn : this.iqns_class.parent(),
viewport : $(window),
viewport_width : this.viewport.width(),
viewport_height : this.viewport.height(),
plugin : {
containerID : "",
first : false,
previous : false,
next : false,
last : false,
startPage : 1,
perPage : 6,
midRange : 6,
startRange : 1,
endRange : 1,
keyBrowse : false,
scrollBrowse: false,
pause : 0,
clickStop : true,
delay : 50,
direction : "auto",
animation : "fadeIn",
links : "title",
fallback : 1000,
minHeight : true,
callback : function(pages, items) {}
}
},
set_local_storage_data: function(data_val) {
return localStorage.setItem(auxiliars.local_storage_key, data_val);
},
get_local_storage_data: function() {
return +(localStorage.getItem(auxiliars.local_storage_key) || 1);
},
set_environment: function(environment) {
if(auxiliars.environment == "Development") {
less.env = "development";
less.watch();
}
},
shop_iqns_selected_class: function() {
if (auxiliars.viewport_width < 980) {
$(auxiliars.iqns_class).each(function(index, element) {
var element = $(element);
$(auxiliars.iqn).on('click', function() {
if (element.hasClass('selected')) {
element.removeClass('selected');
} else {
element.addClass('selected');
}
});
});
}
},
initiate_plugin: function(plugin_navigation, plugin_options) {
var options = $.extend({}, auxiliars.plugin, plugin_options);
return $(plugin_navigation).jPages(options);
}
}
您会注意到this.viewport.width()
,我希望指向同一viewport
对象中声明的auxiliars
变量。显然我收到了错误,但是如何指向同一个对象的子值呢?
答案 0 :(得分:3)
在JavaScript中无法做到这一点。也就是说,没有办法引用使用对象文字构建的“进行中”元素。
但是,您可以在后续赋值语句中引用属性(和子属性)。
var clusters = {
auxiliars: {
environment : "Development",
local_storage_key : "Cluster",
iqns_class : ".iqn",
iqn : this.iqns_class.parent(),
viewport : $(window),
// ...
clusters.auxiliars.viewport_width = clusters.auxiliars.viewport.width();
clusters.auxiliars.viewport_height = clusters.auxiliars.viewport.height();
答案 1 :(得分:3)
我认为最简单的方法是在方法中转换自适应属性:
var clusters = {
auxiliars: {
viewport : $(window),
viewport_width : function(){ return this.viewport.width() },
}
}
clusters.auxiliars.viewport_width();
答案 2 :(得分:1)
您无法在同一对象文字的其他部分中引用新对象文字的一部分。您可以在单独的语句中构建这些部分:
var clusters = ...;
clusters.auxiliars.viewport_height = clusters.auxiliars.viewport.height();
clusters.auxiliars.viewport_width = clusters.auxiliars.viewport.width();
它不那么优雅,但我认为这是唯一的方法。