私は、継承とinstanceof javascriptキーワードの使用を含むBackbone JSアプリケーションを構築しています。backgone jsモデルでinstanceofキーワードが機能しないのはなぜですか?
私は次のコードを持っている:コード内でさらに
app.Sport = Backbone.Model.extend
({
defaults:
{
id: 0,
title: 'Running'
}
});
を、私は次のように入力して、新しいスポーツをインスタンス化:
var newSport = new app.Sport();
私は問題なく、この新しく作成されたインスタンスを操作することができます。
しかし、しかし、がありますので、私のインスタンスの種類を尋ねたときに、instanceofはキーワードは常にfalseを返します。
console.log ('is newSport a Sport instance ? ' + newSport instanceof app.Sport);
は常にfalseを表示します。どうして ?
注:OOPの単純な形式(基本クラスの1つのインスタンスとその直後の型を求める)でも機能しないため、私の質問に継承は言及しませんでした。
私の最初の目的は、スポーツの種類(したがってinstanceofキーワードの使用)に応じて特定のアクションをトリガーすることです。それは涼しい1、または極端いずれかになります。
app.CoolSport = app.Sport.extend ({ ... });
app.ExtremeSport = app.Sport.extend ({ ... });
EDIT:私は問題を単離しました。それはinstanceofキーワードまたは宣言されたモデルにリンクされていません。むしろ、私はBackboneコレクションを作成し、それにいくつかの異なる種類のスポーツを送ります。ここにテストコードがあります:(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コレクションの初期化が問題であると思われます。
アイデア?
私はフィドルあなたの問題を再現するために、私のテストは予想通り、これは動作するはず示しhttp://jsfiddle.net/nikoshr/dX7Nz/ – nikoshr
を動作するようです。どのバックボーン/アンダースコアのバージョンですか? (fiddle:http://jsfiddle.net/HHS8u/) – jakee
console.logを書き留めてみます( 'スポーツインスタンスのnewSportですか?'、(newSport instanceof app.Sport)); - インスタンスが取得されます。 ''はスポーツインスタンスのnewSportですか? + newSport' - それは文字列になります – Sergey