add a section about Object.create(null)
This commit is contained in:
parent
f99c26a5bf
commit
99372573cb
1 changed files with 48 additions and 0 deletions
|
@ -145,6 +145,52 @@ for (var key in rabbit) {
|
|||
}
|
||||
```
|
||||
|
||||
## Object.create(null)
|
||||
|
||||
Зачастую объекты используют для хранения произвольных значений по ключу, как коллекцию:
|
||||
|
||||
```js
|
||||
var data = {};
|
||||
data.text = "Привет";
|
||||
data.age = 35;
|
||||
// ...
|
||||
```
|
||||
|
||||
При дальнейшем поиске в этой коллекции мы найдём не только `text` и `age`, но и встроенные функции:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
var data = {};
|
||||
alert(data.toString); // функция, хотя мы её туда не записывали
|
||||
```
|
||||
|
||||
Это может быть неприятным сюрпризом и приводить к ошибкам, если названия свойств приходят от посетителя и могут быть произвольными.
|
||||
|
||||
Чтобы этого избежать, мы можем исключать свойства, не принадлежащие самому объекту:
|
||||
```js
|
||||
//+ run
|
||||
var data = {};
|
||||
|
||||
// выведет toString только если оно записано в сам объект
|
||||
alert(data.hasOwnProperty('toString') ? data.toString : undefined);
|
||||
```
|
||||
|
||||
Однако, есть путь и проще:
|
||||
```js
|
||||
//+ run
|
||||
*!*
|
||||
var data = Object.create(null);
|
||||
*/!*
|
||||
data.text = "Привет";
|
||||
|
||||
alert(data.text); // Привет
|
||||
*!*
|
||||
alert(data.toString); // undefined
|
||||
*/!*
|
||||
```
|
||||
|
||||
Объект, создаваемый при помощи `Object.create(null)` не имеет прототипа, а значит в нём нет лишних свойств. Для коллекции -- как раз то, что надо.
|
||||
|
||||
|
||||
## Методы для работы с __proto__
|
||||
|
||||
|
@ -162,6 +208,8 @@ for (var key in rabbit) {
|
|||
<dd>Создаёт пустой объект с `__proto__`, равным первому аргументу (кроме IE8-), второй необязательный аргумент может содержать [дескрипторы свойств](/descriptors-getters-setters).</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
## Итого
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue