2010-11-05 5 views
3

Ce code de travail utilise SproutCore:de méthodes enchaînées javascript

person = SC.Object.create({ 
    firstName: 'Foo', 
    lastName: 'Bar', 
    fullName: function() { 
     return this.get('firstName') + " " + this.get('lastName'); 
    }.property() 

}); 

console.log(person.get('fullName')); // "Foo Bar" 

Je me demande où la propriété() est déclarée et la façon dont ils ont fait que cela fonctionne. Lorsque je tente de reconstruire cela sans la classe SC, il me donne:

TypeError: Object function() { 
     return this.get('firstName') + " " + this.get('lastName'); 
    } has no method 'property' 

Comment le code ressemble pour le faire fonctionner? Sproutcore étend le prototype de la fonction.

Répondre

3

Function.prototype.property = function() { /* code here */ }; 

L'utilisation de code spécifique par SproutCore est à https://github.com/sproutcore/sproutcore/blob/master/frameworks/runtime/core.js#L908

SC.mixin(Function.prototype, 
//...snip... 

property: function() { 
    this.dependentKeys = SC.$A(arguments) ; 
    var guid = SC.guidFor(this) ; 
    this.cacheKey = "__cache__" + guid ; 
    this.lastSetValueKey = "__lastValue__" + guid ; 
    this.isProperty = YES ; 
    return this ; 
    }, 
//snip 
); 

Dans leur cas, ils utilisent leur propre méthode mixin, mais le concept est le même: l'extension du prototype

1

Vraisemblablement , Sproutcode a modifié Function.prototype pour inclure une fonction property. Vous pouvez simplement regarder the source code.

+0

Ouais im nouveau à la programmation. Comment suis-je censé savoir où réside le code? – ajsie

+0

@weng: http://www.google.com, ou juste regarder le site Web de SproutCore (également trouvé par Google) http://www.sproutcore.com/documentation/ –

+0

Je voulais dire où comme dans le code source :) – ajsie

Questions connexes