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