Можете ли вы сделать объект в Javascript, который не наследует от объекта? - PullRequest
7 голосов
/ 25 января 2012

Иногда существует JS framework или библиотека, которая считает действительно разумной идею добавить некоторые новые сетевые функции в прототип Object или Array.Я не могу найти больше примеров прямо сейчас, но я помню, что у меня были проблемы с этим раньше.Конечно, это нарушает старый добрый цикл for(...in...), потому что внезапно эти свойства теперь тоже перечисляются.Чтобы обойти это, вы должны проверить каждое перечисленное свойство с .hasOwnProperty() перед доступом.Что является громоздким, когда я пытаюсь написать надежный код.

Итак, я задался вопросом - есть ли способ, которым я мог бы сделать свои собственные объекты так, чтобы они не наследовали от Object?Начальная игра с .prototype не дала никаких результатов.Возможно, в этом есть какая-то хитрость?Или все будет всегда наследоваться от Object, и я ничего не могу с этим поделать?

Добавлено: Наверное, я должен был отметить, что хочу это для клиентских скриптов в браузерах, исовместимость должна включать IE6 или хотя бы IE7.Другие требования к версии браузера более мягкие, хотя, конечно, чем больше, тем лучше.(Да, к сожалению, корпоративный мир все еще живет в мире IE ...)

Ответы [ 2 ]

4 голосов
/ 25 января 2012

В ECMAScript 5 вы можете передать null в Object.create:

> obj = Object.create(null);
  Object
    No Properties
1 голос
/ 25 января 2012

Вы можете явно удалить любые свойства объекта, которые перечисляются, но современные браузеры допускают не перечисляемые методы объекта.

Должно работать в старых браузерах.

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...