JavaScript метод setPrototypeOf()
JavaScript Object
Определение и применение
JavaScript метод setPrototypeOf()
позволяет установить или изменить прототип указанному объекту.
Обращаю Ваше внимание, что создаваемый объект наследует свойства от прототипа. Каждый объект в Javascript имеет внутреннюю ссылку на другой объект, называемый его прототипом. У объекта-прототипа также может быть свой собственный прототип и так далее до тех пор, пока эта цепочка не завершится объектом, у которого свойство prototype равно null. Это значение указывает на то, что объект не имеет прототипа и является завершающим звеном в цепочке прототипов.
Указание прототипа может снизить производительностиь кода JavaScript, имеющего доступ к объекту, прототип которого был изменен. Метод ничего не делает, если параметр prototype не является объектом или null.
Для того, чтобы получить прототип необходимого объекта Вы можете воспользоваться методом getPrototypeOf().
Поддержка браузерами
| Метод | ![]() Chrome | ![]() Firefox | ![]() Opera | ![]() Safari | ![]() IExplorer | ![]() Edge |
|---|---|---|---|---|---|---|
| setPrototypeOf() | 34.0 | 31.0 | Да | 9.0 | 11.0 | Да |
JavaScript синтаксис:
Object.setPrototypeOf( obj, proto );
Версия JavaScript
ECMAScript 5.1 (реализовано в JavaScript 1.8.5)Значения параметров
| Параметр | Описание |
|---|---|
| obj | Объект, которому необходимо установить или изменить прототип. Обязательный параметр. |
| proto | Объект прототип, который будет установлен, или значение null. Обязательный параметр. |
Исключения
| Тип исключения | Описание |
|---|---|
| TypeError | Возникает в том случае, если объект, чей прототип должен быть изменен является нерасширяемым. |
Пример использования
let someObject = { getName: function(){ // возвращает значение свойства firstName текущего объекта return this.firstName } } let someObject2 = { getName: function(){ // возвращает значение свойства firstName текущего объекта и конкатенирует строковое значение return this.firstName + " на крюку повис" } } // создаем новый объект let myObj = Object.create( someObject, { // указываем, что объект прототип соответствует объекту someObject firstName: { // добавляем новое свойство value: "Boris" // указываем значение свойства } }); console.log( myObj.getName() ); // "Boris" // возвращаем прототип переданного объекта и сравниваем его с объектом someObject console.log( Object.getPrototypeOf( myObj ) === someObject ); // true Object.setPrototypeOf( myObj, someObject2 ) // изменяем прототип указанному объекту console.log( myObj.getName() ); // "Boris на крюку повис" // возвращаем прототип переданного объекта и сравниваем его с объектом someObject console.log( Object.getPrototypeOf( myObj ) === someObject2 ); // true
В этом примере мы иницилизировали две переменные, содержащие объекты, каждый из них содержит одноименный метод возвращающий значение свойства firstName текущего объекта в первом случае и значение свойства firstName и некоторое текстовое содержимое во втором.
Далее с использованием метода create() мы создали новый объект с указанным объектом прототипом someObject и одним собственными (неунаследованным) свойством (ключ (атрибут) value устанавливает значение для свойства).
После этого мы с помощью унаследованного свойства (метода getName) выводим в консоль значение свойства firstName. Затем с помощью метода getPrototypeOf() мы возвращаем прототип переданного объекта и проверяем соответствует ли он объекту someObject. Результат проверки будет положительный.
Далее мы с помощью метода setPrototypeOf()
изменяем прототип нашему объекту myobj и вызываем унаследованный метод getName.
И наконец с помощью метода getPrototypeOf() мы возвращаем прототип переданного объекта и проверяем соответствует ли он объекту someObject2. Возвращаемое значение при этом будет соответствовать true.
JavaScript Object




