Введение
Как известно, создать новый объект в JavaScript можно используя функцию-конструктор следующего вида:
function Fubar (foo, bar) {
this._foo = foo;
this._bar = bar;
}
var snafu = new Fubar("Situation Normal", "All Fsked Up");
Когда мы вызываем функцию-конструктор при помощи ключевого слова new
, то получаем новый объект, а контекст его конструктора устанавливается на сам объект. Если мы явно не возвращаем ничего из конструктора, то получаем сам объект в качестве результата. Таким образом, тело функции конструктора используется для инициализации вновь созданного объекта, прототипом которого будет содержимое свойства prototype
конструктора, так что можно писать следующим образом:
Fubar.prototype.concatenated = function () {
return this._foo + " " + this._bar;
}
snafu.concatenated()
//=> 'Situation Normal All Fsked Up'
Используя оператор instanceof
можно убедиться в том, что объект был создан при помощи определенного конструктора:
snafu instanceof Fubar
//=> true
(Заставить работать instanceof
«неправильно» возможно при в случаях с более продвинутыми идиомами, или же если вы — вредный тролль, собирающий исключения языка программирования и получающий наслаждение, истязая ими соискателей на собеседованиях. Однако, для наших целей instanceof
работает достаточно хорошо.)
Читать полностью »