de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 Coderer
Coderer
質問

JavaScriptの親オブジェクトを参照するときに、「変数が初期化されていない可能性があります」を避けるにはどうすればよいですか?

私はたくさんの "この警告を避けるにはどうすればいいですか"という質問があることを知っていますが、JavaScriptの最初のものは私のようです。この場合、自分自身の宣言の中で初期化しているものを参照したいと思っています:

var foo = new Foo({
  bar: new Bar({
    x: function(){
      doStuff(foo);
    }
  });
});

(これが馴染んでいれば、以前はExtJSを使用していたかもしれません - これはほとんどのものがビルドされている方法です)。

foo.bar.x()を呼び出すと、バー( bar )を所有するFoo( foo )それが関数( x )を呼び出しています。これはうまくいきますが、私のEclipseは "fooが初期化されていないかもしれない"と警告し、 doStuff(); の呼び出しを参照しています。 foo をまだ定義していません。もちろん、 foo が正常に構築されない限り、 x()を呼び出すことはできませんが、私のスタイルチェッカーは明らかにそれを理解していません。

だから私はこれに対処する方法を失っている。私は警告を無視すべきですか?それをそのようにマークする方法はありますか?私はもはや警告を受けませんか?私はこれを間違っているのですか?私は別の方法で私の参照を渡す必要がありますか?

5 2011-10-27T21:54:59+00:00 4
 Coderer
Coderer
編集された質問 27日 10月 2011 в 10:05
プログラミング
javascript
eclipse
warnings
Raynos
27日 10月 2011 в 10:46
2011-10-27T22:46:30+00:00
さらに
ソース
編集
#56793415
var Foo = function() { }

var Bar = function (obj) {
 //foo is not initialized
  obj.x();
 //called doStuff with undefined
}

var foo = new Foo({
  bar: new Bar({
    x: function(){
      doStuff(foo);
    }
  });
});

Eclipseは正しいです。また、WebStorm 3.0またはVisual Studio 11をJS IDEとして使用することを検討してください。

2
0
RobG
27日 10月 2011 в 10:12
2011-10-27T22:12:55+00:00
さらに
ソース
編集
#56793413

これはjavascriptとは関係ありませんが、おそらくEclipseと関係しています。変数宣言はコードが実行される前に処理されるので、変数 foo はどこでも宣言できます。 doStuff が呼び出される前にいつでも初期化することができます(宣言していない変数を初期化することは悪いとみなされます)。

1
0
GolezTrol
27日 10月 2011 в 10:10
2011-10-27T22:10:12+00:00
さらに
ソース
編集
#56793412

まず、Fooが構築されます。そのコンストラクターに、新しいBarが渡され、変数fooを使用する関数が渡されます。

しかし、fooは、Fooのコンストラクタが終了した後にのみ値が割り当てられます。その時点で、宣言されていない変数fooを使用して関数がすでに宣言されています。 関数がBarまたはFooのコンストラクターで使用されている場合、関数は失敗します。

0
0
nrabinowitz
27日 10月 2011 в 10:20
2011-10-27T22:20:17+00:00
さらに
ソース
編集
#56793414

私は@ RobGが正しいと思います。これはEclipseの問題であり、おそらくそれを処理するのが最善でしょう。しかし、それを避けたい場合は、初期化する前に foo を宣言することができます。これはEclipseが不平を言うのを防ぐでしょう:

var foo;
foo = new Foo({
  bar: new Bar({
    x: function(){
      doStuff(foo);
    }
  });
});
0
0
関連コミュニティ 1
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
4 ユーザー
日本人コミュニティのjavascript @react_ja @php_ja @angular_ja @vue_ja
開く telegram
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 16時間前
2
Hideo Nakagawa
登録済み 1日前
3
Sergiy Tytarenko
登録済み 3日前
4
shoxrux azadov
登録済み 5日前
5
Koreets Koreytsev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属