Страницы: 1
Ситуация: разрабатывается расширение, в котором явно напрашивается использование некоторых фич JavaScript 1.8.5, особенно - использование bind() в callbacks для передачи контекста. Стандарт JS 1.8.5 вводится начиная с Gecko 2/Fx 4.0. Релиз 4-ки ещё не вышел, да и пользователей более ранних версий даже чисто теоретически не хотелось бы оставлять за бортом. Имеются 2 выхода из ситуации:
1) ручная имплементация bind:
Function.prototype.bind=function(scope) { var fn=this; return function() { return fn.apply(scope,arguments); }; };
2) использование старого костыля а-ля var that=this.
Второй вариант не хочется использовать, потому как это старый костыль, запутывающий код, и плохочитабельный. Сомнения относительно первого варианта базируются на том соображении, что callbacks используются в скриптах браузерного оверлея, и модификация свойств глобальных объектов трудно предсказуема по части поведения других расширений (не говоря уже о том, что требования к разработке однозначно указывают экранировать через namespaces свои программные единицы). В общем, вопрос данного топика - не столько о решении проблемы, сколько о приемлемой методологии решения.
Отредактировано hydrolizer (15-01-2011 21:10:56)
Отсутствует
А чем такой способ не нравится?
Isn't it ironic... don't you think? — Alanis Morissette
Отсутствует
Это практически то же, что я выше и привел - просто я для краткости многие нюансы опустил, полная реализация bind() ведь занимает намного больше кода. И, опять же, выше я писал, что именно этот вариант лично меня устраивает более чем - просто хотелось бы знать, насколько подобное внедрение функциональности в глобальные объекты соответствует требованиям к разработке. Ну, допустим, если это попадёт на AMO
Отсутствует
Страницы: 1