Buduję aplikację szkieletową JS, która obejmuje dziedziczenie i użycie instancji javascript.Dlaczego słowo kluczowe instanceof nie działa z modelami Backbone js?
Mam następujący kod:
app.Sport = Backbone.Model.extend
({
defaults:
{
id: 0,
title: 'Running'
}
});
Ponadto w kodzie, I instancji nowy sport wpisując:
var newSport = new app.Sport();
mogę manipulować tej nowo utworzonej instancji bez problemów.
Ale, ponieważ nie jest to jednak słowo kluczowe instanceof zawsze return false gdy prosi o rodzaju mojego przykład:
console.log ('is newSport a Sport instance ? ' + newSport instanceof app.Sport);
zawsze wyświetla fałszywe. Czemu ?
Uwaga: W moim pytaniu nie wspomniałem o dziedziczeniu, ponieważ nie działa ono nawet z prostą formą OOP (jedna instancja klasy bazowej i pytanie o typ zaraz po).
Moim początkowym celem jest wywołanie określonych działań w zależności od rodzaju sportu (czyli użycie słowa kluczowego instanceof); to może być fajny, lub ekstremalnym jeden:
app.CoolSport = app.Sport.extend ({ ... });
app.ExtremeSport = app.Sport.extend ({ ... });
EDIT: I izolowane problem. Nie jest on powiązany ze słowem kluczowym instanceof lub z deklarowanym przeze mnie Modelem. Zamiast tego, zapełniam kolekcję kręgosłupa i popycham do niej różne rodzaje sportów. Oto kod testowy: (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..");
}
});
I zgadnij co? moja instancja CoolSport ... nie jest instancją CoolSport. Podejrzewam, że problemem była inicjatywa kolekcji Backbone SportList.
Wszelkie pomysły?
Wydaje się pracować http://jsfiddle.net/nikoshr/dX7Nz/ – nikoshr
I skrzypce, aby odtworzyć twój problem, ale moje testy pokazują, że to powinno działać zgodnie z oczekiwaniami. Którą wersję szkieletu/podkreślenia masz na sobie? (skrzypce: http://jsfiddle.net/HHS8u/) – jakee
spróbuj zapisać console.log ("is newSport a Sport instance?", (newSport instanceof app.Sport)); - pojawi się instancja ''to newSport a Sport instancja? + newSport' - będzie to ciąg – Sergey