2016-07-23 12 views
0

私はちょうど1週間ほど前にJavascriptの学習を始めましたが、ちょっとした障害にぶつかりました。提供されたリンクでは、何らかの理由でオブジェクト内の関数を呼び出せません。私が間違っていることは何ですか?どんなアドバイスも素晴らしいでしょう。オブジェクト内の関数を呼び出す方法

Javascript code

+2

'this.word'の代わりに' this'を使用するだけで、コンソールはあなたがいる場所に基づいて 'this'の値が異なります。 –

+0

その構文は私には見えます。関数をオブジェクトの一部として定義するときは、すでに名前を... 'bar'と指定しています。私は 'test'もそこにいるはずだとは思わない。何かのように: 'バー:function(){...}' – David

+1

@David、構文は奇妙です、私は同意しますが、それは動作します:[fiddle](https://jsfiddle.net/kv6bf76n/)。 –

答えて

2

あなたは、関数を呼び出しているが、機能は未定義戻っています。 が別のコンテキストで呼び出される異なる意味を持っているという事実に注意してください。testObj,this == testObjであり、したがってthis.wordは未定義です。

多分、fiddleが役に立ちます。

0
var testObj = { 
    bar: function(){ 
console.log(this.word) 
} 
} 

あなたはここでtestObj.bar を呼び出すと、これはtestObjを参照し、testObjがあるので何の財産ワード

var testObj = { 
    bar: function(){ 
console.log(this.word) 
}.bind(this) 
} 

使用.bind(この)または.bind(ウィンドウ)

0

を持っていません範囲が変更されました。

JavaScriptでは、スコープはコードの現在のコンテキストを参照します。スコープは、グローバルまたはローカルで定義できます。 JavaScriptスコープを理解することは、防弾コードを作成し、より良い開発者になるための鍵です。変数/関数にアクセスできる場所を理解し、コードのコンテキストの範囲を変更し、より迅速でメンテナンス可能なコードを書くことができ、デバッグ時間を大幅に短縮できます。

だから、正しいコードは次のとおりです。あなたのソリューションで

var that = this; 
var testObject = { bar: function() { return that.word }} 

、 "これは" "ウィンドウ" オブジェクトです。したがって、あなたもこれをコード化することができます:

var testObject = { bar: function() { return window.word }} 
関連する問題