2016-05-08 6 views
0

Ich habe dieses Stück Code in der Meteor.js-Tutorial entdeckt. Es ist ES2015:Weird-Funktion Definitionssyntax in JS

Meteor.methods({ 
    'tasks.insert'(text) { 
    check(text, String); 

    // Make sure the user is logged in before inserting a task 
    if (! this.userId) { 
     throw new Meteor.Error('not-authorized'); 
    } 

    Tasks.insert({ 
     text, 
     createdAt: new Date(), 
     owner: this.userId, 
     username: Meteor.users.findOne(this.userId).username, 
    }); 
    }, 
}); 

Und ich bin neugierig auf diese Art der Definition von Funktionen. Wie wir sehen können, erhält Meteor.methods ein Objekt als Parameter, und dieses Objekt enthält Funktionen als die Werte seiner Stützen. Aber was für ein Teufel ist das:

'tasks.insert'(text) { 

?? Ich erwarte, dass "tasks.insert" eine Zeichenfolge ist, die den Prop-Namen darstellt, und dass der Prop-Name einer Funktion zugeordnet werden sollte, die das Einfügen ausführt. aber warum ist es nicht so

'tasks.insert': (text) => { 

oder

'tasks.insert': function(text) { 

Was für ein Muster ist, dass und wie funktioniert dies sogar ein gültiger JS sein?

Antwort

1

Dies ist ein ES6 syntatic sugar.

Beispiel:

var a = { 
    foo: 'bar', 
    log() { 
    console.log('hi'); 
    } 
} 

a.foo // 'bar' 
a.log() // 'hi' 

Genau das gleiche, als ob Sie log: function { console.log('hi') }

+0

Sie und sorry für eine solche dumme Frage Vielen gemacht habe. Ich wusste einfach nicht, wie ich es nennen sollte, um danach zu suchen und entschied, dass das Platzieren eines Codebeispiels bequemer wäre. –

+0

[Wenn eine Funktion der Wert einer Eigenschaft ist, erhält sie ihren Namen von dieser Eigenschaft.] (Http://www.2ality.com/2015/09/function-names-es6.html#methods-in-object-literals) – Knu