2010-12-17 156 views
0

你好我試圖讓我的頭圍繞在javascript一些基本的東西定義,我想創建相當於一個類 見下文:對象返回未在JavaScript

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return myTester; 
} 
}; 

當我打電話alert(myTest.testCode());我得到錯誤myTester未定義;

我也有類似問題,嘗試設置myTester的值太大,我想在這裏實現的是沿着這一線的東西時:

var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

爲MyObj中是我應該再創建一個對象能夠訪問它的值,但我通常不做JavaScript只是jQuery,我 試圖創建一個純JavaScript的應用程序只爲大腦飼料,並會感激一點指導,特別是你實際稱這是什麼,它是一類????

感謝

回答

5

您有權訪問this

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return this.myTester; 
} 
}; 

說明:在每一個功能,this指函數被調用的背景下,如果調用func()功能則this將參考到全局對象(瀏覽器中的window)。
如果您致電obj.func(),則this將參考obj

這是函數和對象之間的唯一連接。事實上,你將一個函數定義爲一個對象的屬性,而不是使該函數知道該對象。

函數是JavaScript中的頭等對象,因此不會綁定到任何對象(或類)(就像其他語言(例如Java))。


var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

是行不通的,因爲myTest.testCode()返回字符串"testing"(和字符串沒有myTester屬性)。如果你想使這段代碼工作,你就必須在testCode返回this

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return this; 
} 
}; 

但隨後,兩條線是相同的

var tester = myTest.myTester; 

我建議閱讀一些介紹到JavaScript,例如MDC - JavaScript Guide並特別閱讀有關物品。

P.S .:非常正確,類不存在於JavaScript中。只有對象和構造函數。

+0

我怎樣才能得到多值以上可能是一個流浪漢例如,即myTester:null,myTester2:null,testCode()函數(){this.myTester =「123」; this.myTester2 =「456」; } 如何獲得myTester和myTester2的值,這取決於測試代碼中發生了什麼,如果你明白我的意思,謝謝 – davethecoder 2010-12-17 14:58:51

+0

@ minus4:好的,如果你的對象存儲在var myTest = {}'中。然後你會這樣做:'myTest.testCode();'然後你可以通過'myTest.myTester'或'myTest.myTester2'訪問這些值。但是您不需要存儲'testCode()'的返回值,因爲您無論如何都不會返回任何內容。 – 2010-12-17 15:02:25

+0

邪惡是的,試圖它的一切都在一起:-)謝謝朋友 – davethecoder 2010-12-17 15:05:36

0

你在我的例子中有什麼不會被稱爲類,在我看來,因爲它沒有構造函數。在這一點上,它只是一個對象。

正如Felix Kling所提到的,您需要明確使用this從其方法中引用對象的屬性。

本例不工作,做你想做的:

var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

testCode方法(一次固定使用this),返回myTester屬性(字符串)。該字符串本身不具有myTester屬性,因此tester變量將包含undefined

你可以,而不是僅僅做

var tester = myTest.myTester; 

退一步,一類的一般模式可以是這樣的:

MyClass = function(initialValue) { 
    this._myProperty = initialValue; 
} 

MyClass.prototype = { 
    getMyProperty: function() { 
    return this._myProperty; 
    }, 

    setMyProperty: function(value) { 
    this._myProperty = value; 
    } 
}; 

var myObj = new MyClass("test"); 
alert(myObj.getMyProperty()); 
myObj.setMyProperty("something");