Javascript 如何访问Jquery中嵌套在另一个对象中的对象的属性?

Javascript 如何访问Jquery中嵌套在另一个对象中的对象的属性?,javascript,jquery,object,parameters,Javascript,Jquery,Object,Parameters,我已经试了一段时间了,但没能成功 我正在创建一个对象: (function( $, window) { $.widget("mobile.multiview",$.mobile.widget, { options: { siteMap: [] } }); }) (jQuery,this); 并用字符串和事件数据对象填充它,如下所示: var _mainEventBindings = functi

我已经试了一段时间了,但没能成功

我正在创建一个对象:

(function( $, window) { 

    $.widget("mobile.multiview",$.mobile.widget, {

        options: {  
            siteMap: []
            }
        });
 }) (jQuery,this);
并用字符串和事件数据对象填充它,如下所示:

var _mainEventBindings = function () {
    var self = this;

    $(document).on("some-event", function(e, data) {
       self.options.siteMap.push( { type: "external", data: data } );
       });
 }
这样行。现在,我必须检查循环中存储的event data.toPage属性,以查看存储在那里的字符串是否与当前字符串匹配,因此我不会添加两次内容

但是我不能让它像这样工作:

var j = self.options.siteMap.length;
if (j == 0 ){
    alert("added entry");
    self.options.siteMap.push( { type: "external", data: data } );
    } else {
        for ( i = 0; i <= j; i++) {
            console.log("run "+i);
            console.log( self.options.siteMap);
            console.log( self.options.siteMap[i]);
            if ( data.toPage != self.options.siteMap[i]['data.toPage'] ){
                self.options.siteMap.push( { type: "external", data: data } );
                }
            }
        }
var j=self.options.siteMap.length;
如果(j==0){
警报(“新增条目”);
self.options.siteMap.push({type:“external”,data:data});
}否则{

对于(i=0;i使用self不是一个好主意,因为它会增加窗口。下面是一个示例,说明您试图实现的目标

var s = {},  //create an empty object
    i, siteMap;
s.options = {};
s.options.siteMap = []; //our array

//let's add some data to siteMap array
s.options.siteMap = [{'type': "external0", 'data': 'data0'}, {'type': "external1", 'data': 'data1'}, {'type': "external2", 'data': 'data2'}];

//get the siteMap's properties' property
siteMap = s.options.siteMap;
for (i in siteMap) {
  console.log(siteMap[i].type);  //will print external0, external1 etc.
}

使用self不是一个好主意,因为它会增加窗口。下面是一个示例,说明您正试图实现的目标

var s = {},  //create an empty object
    i, siteMap;
s.options = {};
s.options.siteMap = []; //our array

//let's add some data to siteMap array
s.options.siteMap = [{'type': "external0", 'data': 'data0'}, {'type': "external1", 'data': 'data1'}, {'type': "external2", 'data': 'data2'}];

//get the siteMap's properties' property
siteMap = s.options.siteMap;
for (i in siteMap) {
  console.log(siteMap[i].type);  //will print external0, external1 etc.
}

正如注释中所述,您应该从
for
循环中的比较中删除等号
=

for (var i = 0; i < j; i++) {
   ...
}
(变量i=0;i{ ... }

否则,您的循环将超出范围。

正如注释中所述,您应该从
for
循环的
比较中删除等号
=

for (var i = 0; i < j; i++) {
   ...
}
(变量i=0;i{ ... }

因为你的循环超出了范围。

这一行
var self.options.siteMap=[];
看起来无效。你不能像那样声明深层对象。它在我的插件选项定义范围内,等等。编辑也许你应该从
for
循环的比较中删除
=
(var i=0;i+1@VisioN所说的内容。索引超出了数组范围。请确保将
var
添加到
for
循环中的
i
声明中;否则您将创建一个全局。此行
var self.options.siteMap=[];
看起来无效。您不能这样声明deep对象。它在我的插件选项定义中,请稍候。编辑可能您应该从
for
循环中的比较中删除
=
:for(var i=0;i+1@VisioN说了什么。索引超出了数组的范围。确保在
for
循环中的
i
声明中添加
var
;否则你将创建一个global.hm。我在我的每个插件函数中声明self。请参见上面的编辑。仍然是个问题吗?现在你让我想…我的插件有点像一个widget、 所以我在开始的时候就声明了选项,然后在声明var self=this之后使用self.options从单个函数调用它们,所以实际上我可以跳过“self”而使用“this”。这对我来说没有真正的区别。或者是吗?(有点离题了…)嗯。我在我的每个插件函数中声明self。参见上面的编辑。仍然有问题吗?现在你让我想…我的插件是一个小部件,所以我在开始时声明选项,然后在声明var self=this后使用self.options从各个函数调用它们,所以实际上我可以跳过“self”而使用“this”.对我来说没什么区别。或者是吗?(有点离题…)谢谢!这就是问题所在。谢谢!这就是问题所在。