これは一般的なJSの質問であり、バックボーンに限定されているわけではありませんが、私はバックボーンを学んでいたのでこれに遭遇しました。以下の最初の例では、エラーは発生しませんが、2番目の例では同じではありません。後者の例ではChrome Dev Toolsにエラーが表示されるが、最初のエラーは表示されない場面で何が起こっているのか説明できますか?私の推測では、何かが関数内にあるとき(初期化など)、ブラウザがスクリプトを読み込んでいるときにすぐに実行されるのではなく、定義されているクラスの一部である場合(この場合はapp.ItemView)コンテキストオブジェクトを構築するためにはブラウザがthis.model#getを読み取る必要があるように、オブジェクトコンテキストを完了する必要があります。バックボーンとハンドルバーのコンテキストを初期化関数に追加するとエラーが発生するのはなぜですか?
app.ItemView = Backbone.View.extend({
initialize: function() {
this.context = {
title: this.model.get("title"),
completed: this.model.get("completed")
}
}
});
対
app.ItemView = Backbone.View.extend({
context: {
title: this.model.get("title"),
completed: this.model.get("completed")
}
});
キャッチされない例外TypeError:プロパティを読み取ることができません
未定義の編集の '取得':第1の実施のISNのコンテキスト場合、それはまた、動作しません。適切に定義されている -
app.ItemView = Backbone.View.extend({
initialize: function() {
this.context.title = this.model.get("title");
this.context.completed = this.model.get("completed");
this.render();
}
});
キャッチされない例外TypeErrorは:mu is too short
のコメントを読んだ後this
の未定義
2番目の例の 'this'は' extend'呼び出しの外にあっても(おそらくブラウザの 'window')、それは' {context:{...}} 'オブジェクトではありません'extend'に渡されます。 –
これは間違った質問ですが、何かがまだ定義されていない場合でも、最初の例のように、javascriptはそれで問題ありませんか? "this"がウィンドウを参照している場合、動作しませんが、initializeメソッドでは、まだ作成されていないインスタンスオブジェクトを参照する "this"ではありませんか?なぜJavaScriptはエラーをスローしないのですか? – akantoword
私は、関数が異なるオブジェクトの下で実行できるので(例えば、 'bind'を使ったり、別のオブジェクトのプロパティに関数を割り当てるなど)、bodyの' this'のインスタンスは関数走るhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this#As_an_object_method –