О сейчас в голову пришло, с таким фиксом теоретически возникнет проблема с 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, время: 18:27. |