Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Создать объект тем же конструктором

Пусть у нас есть код:

var obj = new Func();  // Func -- произвольная функция

Мы хотели бы создать объект, используя тот же конструктор, что и obj.

Будет ли этот код работать? Если не для всех Func, то для каких?

var obj2 = new obj.constructor;

Решение
Решение

Обычно — будет работать. Например:

function Func() { 
  this.toString = function() { return 'Func!'; };
}

var obj = new Func();
var obj2 = new obj.constructor();

alert(obj2); // Func!

.. Но это работает только птому, что Func.prototype.constructor == Func. Если кто-то перезапишет Func.prototype (или заменит constructor), то код не сработает:

function Func() { 
  this.toString = function() { return 'Func!'; };
}
*!*
Func.prototype = {};
*/!*

var obj = new Func();
var obj2 = new obj.constructor();

alert(obj2); // [object Object]

В результате изменения конструктора в obj2 создался пустой объект new Object.

#309
Наверх

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!