如何从Javascript中的另一个对象访问数据?

时间:2009-03-19 13:34:06

标签: javascript

我想在jobs.scan对象中访问availJobs,但我不能。它没有在jobs.attack中定义。如何在其他对象中访问jobs.scan的部分?

var jobs = new Array();

jobs.scan = function() {
    var availJobs = new Array();
    var jobContents = dom.get("app8743457343_content");
    var boldthreads = jobContents.getElementsByTagName('b');
    for(var i = 0; i < boldthreads.length; i++) {
        if(boldthreads[i].style.color == 'silver') {
            availJobs.push(boldthreads[i].textContent);
        }
    }
    return availJobs;
}

jobs.attack = function() {
    jobs.scan();
    alert(jobs.availJobs[0]);
}

jobs.attack();
jobs.attack中的 availJobs [0]不起作用。这是未定义的。如何将availJobs设置为公共,并可以在其他对象中访问?jav

感谢所有的帮助!! 这是我提出的代码:

var jobs = {
    availJobs: new Array(),
    scan: function() {
        var jobContents = dom.get("app8743457343_content");
        var boldthreads = jobContents.getElementsByTagName('b');
        for(var i = 0; i < boldthreads.length; i++) {
            if(boldthreads[i].style.color == 'silver') {
                this.availJobs.push(boldthreads[i].textContent);
            }
        }
    },
    attack: function() {
        this.scan();
        alert(this.availJobs[0]);
    },
};

jobs.attack();

这段代码肯定更优雅你不觉得吗?我用过这个并且有效!

4 个答案:

答案 0 :(得分:4)

{}用于初始化对象和Array以初始化数组。

var jobs = {
    availJobs : new Array()
}

jobs.scan = function() {
    var jobContents = dom.get("app8743457343_content");
    var boldthreads = jobContents.getElementsByTagName('b');
    for(var i = 0; i < boldthreads.length; i++) {
        if(boldthreads[i].style.color == 'silver') {
            availJobs.push(boldthreads[i].textContent);
        }
    }
    return availJobs;
}

在{}声明中,如果用逗号(,)分隔它们,可以在对象中添加多个成员:

var jobs = {
    availJobs : new Array(),
    anotherMember : null,
    anotherArray : new Array(),
    aFunction = function() {...}
}

答案 1 :(得分:0)

我可能在这里错了,但我很确定你需要在函数本身之外声明availJobs,IE:jobs.availJobs = new Array();

答案 2 :(得分:0)

您的代码不正确。 jobs.scan是一个函数,jobs.attack是另一个函数。 availJobsjobs.scan中定义的局部变量。您不能从另一个函数访问一个函数的局部变量。

更多的是,当您尝试访问它时,availJobs不存在,因为jobs.scan已经完成。

答案 3 :(得分:0)

您需要声明availJobs数组,并且作业应该是一个对象。

var jobs = {}

jobs.availJobs = []

jobs.scan = function() {
    var availJobs = new Array();
    var jobContents = dom.get("app8743457343_content");
    var boldthreads = jobContents.getElementsByTagName('b');
    for(var i = 0; i < boldthreads.length; i++) {
        if(boldthreads[i].style.color == 'silver') {
            availJobs.push(boldthreads[i].textContent);
        }
    }
    return availJobs;
}

jobs.attack = function() {
    jobs.scan();
    alert(jobs.availJobs[0]);
}

jobs.attack();