Last active
August 29, 2015 14:04
-
-
Save nin-jin/13297c8723ecf4516dda 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
/** | |
* Инкапсуляция | |
* | |
* @class Greeter1 | |
*/ | |
var Greeter1 = function(){} | |
/** | |
* Генерирует прикольное имя | |
* | |
* @protected | |
* @method _generateName | |
* @returns string | |
*/ | |
Greeter1.prototype._generateName = function( ){ | |
return 'Mr. ' + Math.random() | |
} | |
/** | |
* Приветствует пользователя. | |
* | |
* @method say | |
*/ | |
Greeter1.prototype.say = function( ){ | |
alert( 'Hello, ', localStorage.userName || this._generateName() ) | |
} | |
/** | |
* Сокрытие | |
* | |
* @class Greeter2 | |
*/ | |
var Greeter2 = function(){ | |
function _generateName( ){ | |
return 'Mr. ' + Math.random() | |
} | |
/** | |
* Приветствует пользователя. | |
* | |
* @method say | |
*/ | |
this.say = function( ){ | |
alert( 'Hello, ', localStorage.userName || _generateName() ) | |
} | |
} | |
/** | |
* Перед тобой две огромные библиотеки Greeter1 и Greeter2. | |
* Они тебе почти полностью подходят, вот только генерируемые имена не слишком интересные. | |
* Авторы библиотеки и не подозревали, что кому-то может потребоваться изменять способ генерации имён, | |
* поэтому и не сделали никакой публичной ручки для его "инъекции". | |
* Однако, в первом случае ты можешь отнаследоваться и перегрузить метод _generateName, | |
* а во втором тебе придётся лезть в исходники библиотеки и править там | |
* В обоих случаях ты лезешь в потроха и берешь на себя ответственность за совместимость с будущими версиями библиотек. | |
* Только в первом случае что-то сломается только, если автор библиотеки отрефакторит её так, | |
* что метода _generateName больше не будет или он будет заменён другим. | |
* А во втором твой патч будет слетать каждый раз при обновлении библиотеки, | |
* даже если там поменялся всего один пробел вначале. | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment