>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Допустимость реализации "вручную" некоторых фич стандарта языка (+) http://forum.mozilla-russia.org/viewtopic.php?id=47779 |
hydrolizer > 15-01-2011 21:09:49 |
Ситуация: разрабатывается расширение, в котором явно напрашивается использование некоторых фич 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 свои программные единицы). В общем, вопрос данного топика - не столько о решении проблемы, сколько о приемлемой методологии решения. |
Lynn > 15-01-2011 21:21:50 |
А чем такой способ не нравится? |
hydrolizer > 15-01-2011 22:40:26 |
Это практически то же, что я выше и привел - просто я для краткости многие нюансы опустил, полная реализация bind() ведь занимает намного больше кода. И, опять же, выше я писал, что именно этот вариант лично меня устраивает более чем - просто хотелось бы знать, насколько подобное внедрение функциональности в глобальные объекты соответствует требованиям к разработке. Ну, допустим, если это попадёт на AMO |