Нестыковка при расширении класса Object
Столкнулся с проблемой.
Расширяю класс Object своими методами, дабы потом они были доступны для DOM объектов. Вот пример метода: Object.prototype.mymethod = function(options){ ... } Далее, например, вызываю для какого-нибудь объекта DOM ( element.mymethod() ). Но вот проблема, в options мне нужно передать объект с параметрами {var:val ...}, однако на входе в .mymethod() я уже получаю дополнительные ключи с кодом этих самых prototype методов, т.е. вместо {var:val} получаю {mymethod:код ф-ции, var:val}. Я не могу понять, почему методы приклеиваются к объекту таким произвольным образом. Можно ли этого как-то избежать (кроме как отсеивать имена, совпадающие с методами)? |
PRStudio,
код функции mymethod сам добавляется потому что вы расширили прототип объектов и теперь при передаче объекта в нем автоматически присутствует эта функция |
PRStudio,
но это обходимая проблема Object.prototype.mymethod = function(options){ for (i in options) { if ((i + '') == 'mymethod') continue; //здесь будут ваши свойства без mymethod } } |
Дзен-трансгуманист,
ага расширение на сотни =), но я просто не поспел за вами и написал на скорую руку:) |
Спасибо, а то я уже подумывал реально список методов составить и их вылавливать :)
|
Есть ещё одно решение: сделать метод mymethod неперечисляемым:
Object.defineProperty(Object.prototype, "mymethod", { value: function(options) { ... }, enumerable: false }); |
Цитата:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 01:00. |