Нестыковка при расширении класса 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, время: 14:37. |