Алексей Золотых
var myObject = {
method: function(){
console.log(this);
}
};
myObject.method();
var myObject = {
method: function(){
setTimeout(function(){
console.log(this);
},0);
}
};
myObject.method();
var main = function(){
console.log(Zone.current.name); // 'my-context'
setTimeout(function(){
console.log(Zone.current.name); // 'my-context'
},0);
};
Zone.current.fork({
name: 'my-context'
}).run(main);
var main = function(){
thirdPartyCode(function(){
throw 'error';
},0);
};
Zone.current.fork({
name: 'my-context',
onHandleError: function(){
console.log('error');
return false;
}
}).run(main);
//Класс, для всего приложения
AppView = Backbone.View.extend({
// флаги, описание событий, методы
});
// Класс для задачи в листе
TodoView = Backbone.View.extend({
// флаги, описание событий, методы
});
// Класс для задачи в листе
TodoView = Backbone.View.extend({
isRepeat: true, // флаг
// Логика для повторяющихся событий
// ...
});
isRepeat: true,
clickHandler: function(){
//...
if(this.isRepeat){
this.showRepeatModal();
}
// ... код для других флагов
}
// Класс для задачи в листе
TodoView = Backbone.View.extend({
isRepeat: true,
importedFromWrike,
hasReaded,
hasPermissions,
changed,
synchronized,
// еще 500 строк кода для обработчиков и различных методов
});
TodoView = Backbone.View.extend({
// базовая логика
});
TodoRepeatView = Backbone.View.extend(TodoView,{
// реализация логики для повторяющихся событий
});
MySuperView = Backbone.View.extend(
TodoRepeatView,
MyFeature1View,
MyFeature2View,
MyFeature3View,
MyFeature4View,
TodoView,{
});
MyFeature1View = Backbone.View.extend({
myFeature1method: function(arg){
console.log(arg.foo);
}
});
MyFeature1View = Backbone.View.extend({
myFeature1method: function(arg){
arg.newFoo.call(this);
}
});
MySuperView = Backbone.View.extend({
repeater: new RepeatBehavior(),
render: function(){
//...
repeater.myFeature1method(arg);
//...
}
});
MySuperView = Backbone.View.extend({
repeater: new RepeatBehavior(),
render: function(){
//...
repeater.myFeature1method(arg);
//...
}
});
MySuperView = Backbone.View.extend({
repeater: new RepeatBehavior(newParams),
render: function(){
//...
repeater.myFeature1method(arg);
//...
}
});
grep -inIEr –color=ALWAYS –include="*.js"
"View.*=" source/code/directory/
Конечно, можно использовать ctrl/CMD + F, но сути это не меняет
window.loc = new Locator(),
helloService = {
say : function (name) { return 'Hello ' + (name || 'World') }
}
loc.register('hello', helloService);
function SomeClass(locator) {
var hello = locator.resolve('hello');
this.say = function () {
var name = this.constructor.name;
return hello.say(name);
};
};
angular.module('myModule', [])
.factory('serviceId', ['depService', function(depService) {
// ...
}])
Основная проблема в том, что мы ничего не сможем сказать о типе внедренной зависимости, плачем, колемся, но используем grep.
@Inject(Grinder, Pump, Heater)
export class CoffeeMaker {
constructor(grinder, pump, heater) {
// ...
}
brew() {
console.log('Brewing a coffee...');
}
}
@Inject(Grinder, Pump, Heater)
export class CoffeeMaker {
constructor(grinder, pump, heater) {
// ...
}
brew() {
console.log('Brewing a coffee...');
}
}
@Inject(Grinder, Pump, Heater)
export class CoffeeMaker {
constructor(grinder, pump, heater) {
// ...
}
brew() {
console.log('Brewing a coffee...');
}
}
@Injectable()
@Inject(Logger)
export class HeroService {
constructor(private _logger: Logger) { }
getHeroes() {
this._logger.log('Getting heroes ...')
return HEROES;
}
}
var injectorClass = Injector.resolveAndCreate([
HeroService,
new Provider(Logger, { useClass: ServerLogger })
]);
expect(injectorClass.get(Logger) instanceof ServerLogger).toBe(true);
Также можно подключить DI отдельно, есть версия для JS, Dart и для Typescript.