継承と instanceof javascript キーワードの使用を含むバックボーン JS アプリケーションを構築しています。
私は次のコードを持っています:
app.Sport = Backbone.Model.extend
({
defaults:
{
id: 0,
title: 'Running'
}
});
さらにコードで、次のように入力して新しい Sport をインスタンス化します。
var newSport = new app.Sport ();
この新しく作成されたインスタンスを問題なく操作できます。
しかし、 but があるため、 instanceof キーワードは、 my instance のタイプを要求するときに常に false を返します。
console.log ('is newSport a Sport instance ? ' + newSport instanceof app.Sport);
常に false を表示します。なんで ?
注:私の質問では継承について言及しませんでした。単純な形式の OOP (基本クラスの 1 つのインスタンス、およびその直後に型を要求する) でも機能しないためです。
私の最初の目的は、スポーツの種類に応じて特定のアクションをトリガーすることです (したがって、instanceof キーワードを使用します)。それはクールなものかもしれませんし、極端なものかもしれません:
app.CoolSport = app.Sport.extend ({ ... });
app.ExtremeSport = app.Sport.extend ({ ... });
編集:問題を分離しました。instanceof キーワードまたは宣言したモデルにリンクされていません。むしろ、バックボーン コレクションにデータを入力し、それに別の種類のスポーツをプッシュします。テストコードは次のとおりです:( Fiddle )
var app = {};
app.Sport = Backbone.Model.extend
({
defaults:
{
id: 0,
title: 'Running'
}
});
app.CoolSport = app.Sport.extend
({
defaults:
{
uselessAttr:'I am a Cool Sport !'
}
});
app.SportList = Backbone.Collection.extend
({
model: app.Sport
});
var coolSport1 = new app.CoolSport();
console.log ('is coolSport1 a Sport instance ? ' , coolSport1 instanceof app.Sport);
console.log ('is coolSport1 a CoolSport instance ? ' , coolSport1 instanceof app.CoolSport);
console.log ('is coolSport1 a CoolSport instance (wrong operand in console) ? ' + coolSport1 instanceof app.CoolSport);
var sportList = new app.SportList();
sportList.push (coolSport1.toJSON());
sportList.each ( function ( sport )
{
if ( sport instanceof app.CoolSport )
{
console.log ( "sport is an instance of Cool Sport ! Yeah !" , sport instanceof app.CoolSport ) ;
}
else
{
console.log ( "Not a CoolSport instance..");
}
});
そして、何を推測しますか?私の CoolSport インスタンスは... CoolSport インスタンスではありません。Backbone SportList コレクションの初期化が問題であると思われます。
何か案は ?