2017-03-29 3 views
0

laden Karte:Bing Maps v8 und seltsame Arbeit von instanceof

map = new Microsoft.Maps.Map(document.getElementById('myMap'), { 
    ... 
}); 

Und es funktioniert gut (visuell). Aber:

console.log(map instanceof Microsoft.Maps.Map); // false 

Whaaat ?! :) Wie kann ich das überprüfen? Ist es ein Fehler oder mein Fehler?

Sie können beispielsweise in Bing Dev Center Sandbox versuchen:

http://www.bing.com/api/maps/sdkrelease/mapcontrol/isdk#loadMapAsync+JS

Dank

+0

Können Sie überprüfen, was 'console.dir (Object.getPrototypeoOf (map))' loggt? – Bergi

Antwort

0

die Bing Apps dev Seite verwenden, wenn Sie die new es funktioniert immer noch herausschneiden, und Protokollierung map.constructor nur Drucke function n(). Es scheint also, dass Microsoft nicht genau wusste, was der Code im Moment tut - nämlich als Objektfabrik zu agieren.

Microsoft Mai behält sich das Recht vor, Maps.Map ein Objekt Konstruktor in der Zukunft zu machen. Im Moment instanceof ist die Rückgabe false korrekt.

+0

Dies ist von Entwurf. Das Map-Objekt ist ein Wrapper um eine andere Klasse. V8 hat tatsächlich einen ganz anderen Satz von Code-Syntax, die in Microsoft intern ist und wurde verpackt, um es rückwärts kompatibel mit V7 – rbrundritt

+0

@rbrundritt Dank zu machen. Weißt du, ob das von 'new' erstellte Objekt verwendet wird? Ich schlage ** nicht ** vor, das 'neue' Schlüsselwort auszulassen, wenn es aus nicht offensichtlichen Gründen verwendet wird oder wenn Microsoft es in der Zukunft benötigt. – traktor53

+1

Lustig genug, ich wusste nie, dass die Karte ohne das neue Schlüsselwort laden würde. Frühere Versionen von Bing Maps hätten einen Fehler verursacht. Ich würde empfehlen, es zu lassen, da es weniger wahrscheinlich ist zu brechen, da dies dokumentiert ist. – rbrundritt

Verwandte Themen