Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Библиотечка . (https://javascript.ru/forum/project/6025-bibliotechka.html)

Octane 03.09.2011 16:42

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

float 05.09.2011 19:04

Вроде ерунда, но советую переписать Array_prototype.flatten. Медленно работает.

Kolyaj 06.09.2011 00:01

Медленно по сравнению с чем?

Я его из Prototype перетащил, не помню, чтобы использовал :)

float 06.09.2011 01:16

Цитата:

Я его из Prototype перетащил, не помню, чтобы использовал
хотя конечно, да... функция специфическая.
в своем ворке юзаю похожую функцию для разворачивания мультивыборок.

Riim 06.09.2011 01:40

Я в своем Array#flatten вместо проверки на массив делал проверку на наличие метода flatten:
'flatten' in Object(value)

так вреде правильней (вдруг флаттиться выравниваться умеют не только массивы), хотя хз.

Riim 16.09.2011 02:54

Еще улучшение заметил: в Array#remove к вызову indexOf полезно добавить index вторым аргументом (даже если собственная реализация Array#indexOf не поддерживает второй аргумент, чаще нативная будет использоваться). Так массив не будет каждый раз сначала перебираться.

x-yuri 03.05.2012 20:32

А чего ты тег экранируешь, а имя класса не экранируешь? Хотя там по-моему вообще экранировать не надо, да и trim в общем-то...

А еще можно добавить проверку, что селектор указан, чтобы не делать таке проверки за пределами функции

FINoM 04.05.2012 18:37

Цитата:

Сообщение от x-yuri
А чего ты тег экранируешь, а имя класса не экранируешь?

Да и вообще строка интересная, чего бы просто не написать tagName !== '*'


Часовой пояс GMT +3, время: 11:16.