2010-12-17 6 views
0

で定義されていない返しこんにちは私は は、以下を参照クラスに相当するものを作成したい、JavaScriptでいくつかの基本的なもののまわりで私の頭を取得しようとしています:オブジェクトはJavaScript

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

私は取得alert(myTest.testCode());を呼び出すときエラーmyTesterは未定義です。

私はここで達成しようとしていますどのような、あまりにもmyTesterの値を設定しようとすると、この線に沿って何かあるとき、私も同様の悩みを持っている:このmyobjは、私は一度作成すべき対象であるとして

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

その値にアクセスすることができますが、私は通常jQueryだけでjavascriptをやりません。私は 純粋なjavascriptで脳フィードのためだけにアプリケーションを作成しようとしていますが、特に何を実際にこれを呼び出すのですか? ????あなたはthisにアクセスする必要が

おかげ

答えて

5

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

説明:各関数では、thisは、関数がで呼び出されたコンテキストを指しますが、func()で関数を呼び出す場合、thisを参照します。グローバルオブジェクト(ブラウザのwindow)に転送します。
obj.func()に電話すると、thisobjとなります。

これは、関数とオブジェクトの唯一の接続です。ファンクションをオブジェクトのプロパティとして定義するという事実だけでは、ではなく、がそのオブジェクトを認識します。

関数はJavaScript内のファーストクラスのオブジェクトであり、(Javaなどの他の言語のように)任意のオブジェクト(またはクラス)にバインドされていません。


しかしmyTest.testCode()は、文字列"testing"を返すよう

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

は、動作しないでしょう(と文字列がmyTester性質を持っていません)。あなたは、このコードの作品を​​作りたい場合は、testCodethisを返さなければならないでしょう:

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

が、その後、2行が

var tester = myTest.myTester; 

と同一であり、私はいくつかの紹介を読むことをお勧めJavaScriptに、例えばMDC - JavaScript Guideと特にオブジェクトについて読んでください。

P .:非常に正確であるために、クラスはJavaScriptには存在しません。オブジェクトとコンストラクタ関数のみ。

+0

は私が得ることができますどのように複数の値が、上記のように火傷ことがあります

あなただけではなく、

var tester = myTest.myTester; 

はバックステップに行うことができ、クラスのための一般的なパターンは次のようなものかもしれませんたとえば、myTester:null、myTester2:null、testCode()function(){this.myTester = "123"; this.myTester2 = "456"; } どうすれば私の意味に感謝したら、testcodeで何が起こったかに依存するmyTesterとmyTester2の値を得るでしょうか? – davethecoder

+0

@ minus4:あなたのオブジェクトが 'var myTest = {}'に格納されているとします。次に、あなたは 'myTest.testCode();'を実行し、その後で 'myTest.myTester'または' myTest.myTester2'を使って値にアクセスすることができます。とにかく何も返さないので、 'testCode()'の戻り値を格納する必要はありません。 –

+0

wicked yepは一緒に一緒に来てみました:-) thanks pal – davethecoder

0

私の意見では、コンストラクタ関数がないので、あなたの例であなたが持っているものは、クラスと呼ばれることはありません。この時点では、単なるオブジェクトです。

Felix Klingの言葉通り、thisを明示的に使用して、そのメソッド内からオブジェクトのプロパティを参照する必要があります。

この例では、あなたがやりたい動作しません。

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

(一度thisを使用するように固定)testCode方法は、myTesterプロパティ(文字列)を返します。その文字列自体にmyTesterプロパティがないため、tester変数にはundefinedが含まれます。

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"); 
関連する問題