2015-07-10 44 views
0

正在處理JavaScript項目。這是一個有點複雜,我知道,但我想基本上驗證,並通過相關的財產的Object1查詢作用,從Object2的信息(如果是有道理的)...對象屬性返回爲未定義(JavaScript)

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++) { 
     if (this._list[i]._name == param) { 
      console.log(this._list[i]._name); // outputs "foo" 
      return this._list[i]._name // **TypeError: value is undefined** 
     } 
    } 
}; 

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

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

我知道這有點複雜。我的問題雖然,它返回 'param._name',它給出了TypeError。但是,在前一行中,當我將它發送到控制檯時,它會很好。

我承認我對JavaScript有點新,甚至對OOP更新,所以如果這是一個愚蠢的或無意義的問題,請在我身上輕鬆一下!

任何想法?所有的想法和建議表示讚賞。

感謝

+0

首先,將您的方法調用置於您的方法定義之下。 – Bergi

+0

是的,'this.object','var foo ='和'== item'部件是錯誤的。你可以在問你的問題之前解決這些問題嗎,這樣你的實際問題至少可以重現嗎? – Bergi

+0

編輯是一個更清潔 - 對不起, – user2283234

回答

0

Object1方法1應該是這個樣子的:

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

通知的回報在那裏。感謝所有試圖回答的人,並感謝您的幫助。這篇文章從一開始就是一個故障 - 我自己的錯 - 我對此表示歉意,但是我非常感謝您的幫助和善意幫助我解決問題。

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"); 
+0

我編輯了示例中的代碼,以更好地反映我實際嘗試執行的操作。我爲這種sl ap行爲表示歉意 - 我對此仍然很陌生 – user2283234