Можете ли вы создать объект в Javascript, который не наследуется от Object?
иногда есть JS рамки или библиотека, которая считает, что это действительно мудрая идея добавить некоторые новые функции в прототип Object
или Array
. Я не могу найти больше примеров прямо сейчас, но я помню, что у меня были проблемы с этим раньше. Конечно, это ломает старый добрый for(...in...)
цикл, потому что внезапно эти свойства теперь перечислены тоже. Чтобы обойти это, вы должны проверить каждое перечисленное свойство с помощью .hasOwnProperty()
перед обращением. Какой громоздко, при попытке написать надежный код.
поэтому мне стало интересно - есть ли способ сделать мои собственные объекты так, чтобы они не наследовали от Object
? Начальная игра с .prototype
не дал никаких результатов. Может быть, в этом есть какая-то хитрость? Или все всегда будет наследовать от Object
и я ничего не могу с этим поделать?
добавлено: Я думаю, я должен был отметить, что я хочу его для клиентских скриптов в браузерах и совместимости должен включать IE6 или, по крайней мере, IE7. Другие требования к версии браузера более снисходительны, хотя, конечно, чем больше, тем лучше. (Да, к сожалению, корпоративный мир все еще живет в IE-мире...)
2 ответов
в ECMAScript 5 Вы можете пройти null
to Object.create
:
> obj = Object.create(null);
Object
No Properties
можно явно удалить все свойства объекта, которые можно перечислить, но браузеры moderen разрешают ненумеруемые методы объектов.
должны работать в старых браузерах.
function Myobject(props){
}
var O=Object,OP=Object.prototype;
for(var p in O)delete Myobject[p];
for(var p in OP)delete Myobject.prototype[p];