Работа вокруг Script # именования конфликтов - PullRequest
0 голосов
/ 25 февраля 2012

Есть ли способ обойти конфликты имен между Script # и другими скриптами, загруженными на страницу? Например, мы создали компонент с использованием Script #, который будет работать на существующем сайте, который мы не можем изменить (кроме добавления наших сценариев). Однако другой сценарий на сайте также определяет некоторые из тех же типов и расширений (например, Boolean.parse), которые вызывают всевозможные хаосы.

1 Ответ

0 голосов
/ 07 апреля 2012

Script # - довольно плохой гражданин (на текущий момент версии 0.7.4) в мире совместимости библиотек JavaScript. Его mscorlib.js изменяет прототипы глобальных классов, таких как Object, Boolean, Date, Error, Number, String и Array. Последнее особенно раздражает, учитывая известную причуду JavaScript «for ... in», согласно которой свойства прототипа перечисляются вместе со всеми свойствами локального объекта, что вынуждает использовать object.hasOwnProperty для защиты вашей итерации.

По моей оценке, Script # по сути предполагает, что это либо A) единственная используемая библиотека, либо B) единственная библиотека, которая будет пытаться связываться с глобальными прототипами. Учитывая, что Script # поддерживает формально jQuery, B кажется более вероятным.

Чтобы разобраться с вашей конкретной ситуацией, потребуется некоторая тяжелая работа. Можно написать код Script #, не полагаясь на какие-либо функции mscorlib, а затем запустить / отправить свой код без этого файла. Поскольку вы не можете изменить другой код, это, вероятно, единственный способ здесь (я бы не хотел пытаться переписать mscorlib и не знаю, возможно ли это, учитывая не полностью открытый исходный код Script #) , Требуется некоторая дисциплина и осторожность, чтобы избежать использования mscorlib - вы не можете / не должны фактически удалять mscorlib как формальную зависимость проекта (из-за компилятора), вы просто должны избегать его использования.

...