2010-11-05 5 views
3

Этот рабочий код использует SproutCore:Метод цепочки в 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" 

Интересно, где объявлен собственностью() и как они сделали это, чтобы работать. Когда я пытаюсь восстановить это без класса SC, это дает мне:

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

Как выглядит код, чтобы заставить его работать?

ответ

3

Sproutcore расширяет функциональный прототип.

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

Конкретное использование кода по SproutCore находится в 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 
); 

В их случае, они используют свой собственный метод подмешать, но концепция та же: расширение прототипа

1

Предположительно , Sproutcode модифицировал Function.prototype, чтобы включить функцию property.

Вы можете просто посмотреть на the source code.

+0

Да, новое для программирования. Как я должен знать, где находится код для этого? – ajsie

+0

@weng: http://www.google.com или просто посмотрите веб-сайт SproutCore (также найденный через Google) http://www.sproutcore.com/documentation/ –

+0

Я имел в виду, где, где в исходном коде :) – ajsie

Смежные вопросы