Created
April 28, 2011 20:09
-
-
Save artsobolev/947203 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function(){ | |
var _utils = { // String.prototype.utils | |
append : function(tail){ | |
return this + tail; | |
} | |
}, | |
utils = {}, // фронтэнд. на этот объект будут навешены геттеры. | |
// на _utils геттеры вешать нельзя т.к. тогда мы не сможем (вроде как) добраться до методов | |
self = null, // тут будет контекст | |
generateGetter = function(fnc){ // это геттер | |
return function(){ // геттер возвращает функцию | |
return function(){ // которая при вызове возвращает | |
// результат применения соответствующего метода с нужным контекстом | |
return _utils[fnc].apply(self, arguments); | |
}; | |
}; | |
}; | |
for(var prop in _utils){ // смотрим все методы _utils | |
if(_utils.hasOwnProperty(prop)){ | |
// и назначаем для них геттеры для нашего фронтэнд объекта | |
utils.__defineGetter__(prop, generateGetter(prop)); | |
} | |
} | |
// Геттер на String.prototype, который вернет наш презентационный объект | |
// Когда кому-нибудь захочется обратиться к какому-нибудь методу этого объекта, | |
// обьявленному в _utils, он попадет на геттер | |
String.prototype.__defineGetter__('utils', function(){ | |
self = this; | |
return utils; | |
}); | |
})(); | |
// Пример | |
console.log('Hello'.utils.append(' World')); | |
console.log('Hello'.utils.append(' World') | |
.utils.append('!')); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment