О сейчас в голову пришло, с таким фиксом теоретически возникнет проблема с defineProperty:
(function () { function fn() {} var obj = {}; Object.defineProperty(obj, "toString", {value: fn, enumerable: false}); console.log(Object.keys(obj));//[] console.log(obj.hasOwnProperty("toString"));//true console.log(obj.propertyIsEnumerable("toString"));//false }()); кто-то специально выставит enumerable:false , а мы в Object.keys проверим obj.hasOwnProperty("toString") и все равно вернем ключ toString . НО браузеров, одновременно поддерживающих Object.defindeProperty и не поддерживающих Object.keys , и имеющих баг, наверное нет, ну кроме IE8, но в нем Object.defindeProperty работает только для DOM-объектов и при попытке установить для этих свойств enumerable:false возникает ошибка: «Для данного объекта атрибут enumerable дескриптора свойства не может иметь значение false »Object.defineProperty(Element.prototype, "toString", { value: function fn() {}, enumerable: false }); Object.keys: 1|2 |
Вроде ерунда, но советую переписать Array_prototype.flatten. Медленно работает.
|
Медленно по сравнению с чем?
Я его из Prototype перетащил, не помню, чтобы использовал :) |
Цитата:
в своем ворке юзаю похожую функцию для разворачивания мультивыборок. |
Я в своем Array#flatten вместо проверки на массив делал проверку на наличие метода flatten:
'flatten' in Object(value) так вреде правильней (вдруг |
Еще улучшение заметил: в Array#remove к вызову indexOf полезно добавить index вторым аргументом (даже если собственная реализация Array#indexOf не поддерживает второй аргумент, чаще нативная будет использоваться). Так массив не будет каждый раз сначала перебираться.
|
А чего ты тег экранируешь, а имя класса не экранируешь? Хотя там по-моему вообще экранировать не надо, да и trim в общем-то...
А еще можно добавить проверку, что селектор указан, чтобы не делать таке проверки за пределами функции |
Цитата:
|
Часовой пояс GMT +3, время: 11:16. |