Object属性返回为undefined(JavaScript)

时间:2015-07-10 02:19:08

标签: javascript object properties reference

处理JavaScript项目。我知道,这有点复杂,但我试图通过查询Object1中的相关属性来基本验证和处理来自Object2的信息(如果有意义的话)......

Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);

                    String number = datacollection.get(i).getNo().replace("+", "");
                    String jid = number + "@localhost";

                    Collection<RosterEntry> entries = roster.getEntries();
                    for (RosterEntry entry : entries)
                    {
                        System.out.println(entry);
                        if (entry.getUser().equals(jid))
                        {
                            rosterAlreadyAdded = true;
                            if (entry.getType() != RosterPacket.ItemType.both)
                            {
                                // Create a presence subscription packet and send.
                                Presence presencePacket = new Presence(Presence.Type.subscribe);
                                presencePacket.setTo(jid);
                                connection.sendStanza(presencePacket);
                            }

                        }

                    }
                    if (!rosterAlreadyAdded)
                        roster.createEntry(jid, jid, null);

我知道这有点令人费解。但我的问题是它返回的地方 'param._name',它给出了一个TypeError。但是,在上一行中,当我将它发送到控制台时,它很好。

我承认我对JavaScript有点新,甚至对OOP更新,所以如果这是一个愚蠢或荒谬的问题,请放轻松我!

有什么想法吗?所有的想法和建议都表示赞赏。

由于

2 个答案:

答案 0 :(得分:0)

我在代码中做了同样的更正,试试看:

Object1 = function() {
    this._list = [];
};
Object1.prototype.method1 = function(param) {
     if (param == "foo") { this.method2("foo"); }
};
Object1.prototype.method2 = function(param) {
    for (var i = 0; i < this._list.length; i++) {
        var item = this._list[i];
        if (item._name == param) {
            console.log(item._name); 
            return item._name;
        }
    }
};

Object2 = function(name) {
    this._name = name || "foo";
}

var object = new Object1();
var foo = new Object2("foo");
object._list.push(foo);
object.method1("foo");

答案 1 :(得分:0)

Object1 Method1应如下所示:

Object1.prototype.method1 = function(param) {
    if (param == "foo") { return this.method2("foo"); }
};

请注意返回。感谢所有试图回答并为您提供帮助的人。这篇文章从一开始就是一个火车残骸 - 我自己的错 - 我为此道歉,但我非常感谢你的帮助和善意,帮助我完成它。