Можете ли вы создать объект в 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];