Wenn Sie bei this
in Ihrem summary
statisch aussehen Methode:
summary: function() {
console.log(this);
}
Sie etwas sehen werden:
function(){return r.apply(this,arguments)}
so ist this
in der Tat die Konstruktorfunktion, die Sie erwarten würden. Das bedeutet, dass this
nicht das Problem ist. Wenn Sie M = Backbone.Model.extend(...)
sagen, erhalten Sie eine Konstruktorfunktion zurück in M
.Aber haben JavaScript-Funktionen nicht-beschreibbaren name
properties:
Function.name
Die function.name
Eigenschaft gibt den Namen der Funktion.
Also das Problem ist, dass Sie versuchen, name
als statische Eigenschaft zu verwenden, aber diese Eigenschaft Name bereits vergeben ist, und man kann es nicht überschreiben.
Wenn Sie eine andere Eigenschaft Name:
var Vehicles = Backbone.Model.extend({}, {
pancakes: 'Sabre',
summary: function() {
console.log(this.pancakes + " is a dog!");
}
});
dann werden die Dinge verhalten sich wie erwartet, da Funktionen (in der Regel) nicht nicht-beschreibbaren pancakes
Eigenschaften aufweisen.
Demo: https://jsfiddle.net/ambiguous/qk78edkp/
Was Ihre erste Frage geht, es funktioniert, aber die Konstruktor-Funktion, dass Backbone.Model.extend
geben Sie keinen Namen haben.
Pimmol's answer deckt die zweite Frage gut genug, so werde ich das allein lassen.
Das Problem ist, dass die Wahl von 'bar' als Name der statischen Eigenschaft das Problem in ** (1) ** verbirgt. Versuchen Sie es erneut mit 'name: 'foo'' anstelle von' bar: 'foo'' in Ihrem" kombinierten "Beispiel und Sie werden das ursprüngliche Problem sehen. –