Вот уже полтора года я зарабатываю фрилансом на бирже oDesk. За это время у меня накопилось много материалов по данной теме. В данном топике я собрал все в одну статью и адаптировал для аудитории хабра.
![image](https://habrastorage.org/files/e57/141/1b0/e571411b05f7454096920ec63ca7a938.jpg)
![image](https://habrastorage.org/files/e57/141/1b0/e571411b05f7454096920ec63ca7a938.jpg)
Пользователь
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
работает достаточно хорошо.)Веб-кит не является черным ящиком. Это — белый ящик. И не просто белый, но и открытый ящик.