СоздайÑе новÑй обÑÐµÐºÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñже ÑÑÑеÑÑвÑÑÑего
ÐÑедÑÑавÑÑе, ÑÑо Ñ Ð½Ð°Ñ Ð¸Ð¼ÐµÐµÑÑÑ Ð½ÐµÐºÐ¸Ð¹ обÑÐµÐºÑ obj, ÑозданнÑй ÑÑнкÑией-конÑÑÑÑкÑоÑом â Ð¼Ñ Ð½Ðµ знаем какой именно, но Ñ
оÑелоÑÑ Ð±Ñ ÑоздаÑÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ обÑÐµÐºÑ Ñакого же Ñипа.
Ðожем ли Ð¼Ñ ÑделаÑÑ Ñак?
let obj2 = new obj.constructor();
ÐÑиведиÑе пÑÐ¸Ð¼ÐµÑ ÑÑнкÑии-конÑÑÑÑкÑоÑа Ð´Ð»Ñ Ð¾Ð±ÑекÑа obj, Ñ ÐºÐ¾ÑоÑой Ñакой вÑзов коÑÑекÑно ÑÑабоÑаеÑ. РпÑÐ¸Ð¼ÐµÑ ÑÑнкÑии-конÑÑÑÑкÑоÑа, Ñ ÐºÐ¾ÑоÑой Ñакой код поведÑÑ ÑÐµÐ±Ñ Ð½ÐµÐ¿ÑавилÑно.
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ñакой ÑпоÑоб, еÑли Ð¼Ñ ÑвеÑÐµÐ½Ñ Ð² Ñом, ÑÑо ÑвойÑÑво "constructor" ÑÑÑеÑÑвÑÑÑего обÑекÑа Ð¸Ð¼ÐµÐµÑ ÐºÐ¾ÑÑекÑное знаÑение.
ÐапÑимеÑ, еÑли Ð¼Ñ Ð½Ðµ менÑли "prototype", иÑполÑзÑемÑй по ÑмолÑаниÑ, Ñо код ниже, без Ñомнений, ÑÑабоÑаеÑ:
function User(name) {
this.name = name;
}
let user = new User('John');
let user2 = new user.constructor('Pete');
alert( user2.name ); // Pete (ÑÑабоÑало!)
ÐÑÑ Ð¿Ð¾Ð»ÑÑилоÑÑ, поÑÐ¾Ð¼Ñ ÑÑо User.prototype.constructor == User.
â¦Ðо еÑли кÑо-Ñо пеÑезапиÑÐµÑ User.prototype и забÑÐ´ÐµÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ назнаÑиÑÑ ÑвойÑÑво "constructor", ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ ÑказÑвало на User, Ñо ниÑего не вÑйдеÑ.
ÐапÑимеÑ:
function User(name) {
this.name = name;
}
User.prototype = {}; // (*)
let user = new User('John');
let user2 = new user.constructor('Pete');
alert( user2.name ); // undefined
ÐоÑÐµÐ¼Ñ user2.name пÑинÑло знаÑение undefined?
РаÑÑмоÑÑим, как оÑÑабоÑал вÑзов new user.constructor('Pete'):
- СнаÑала иÑеÑÑÑ ÑвойÑÑво
constructorв обÑекÑеuser. Ðе наÑлоÑÑ. - ÐоÑом задейÑÑвÑеÑÑÑ Ð¿Ð¾Ð¸Ñк по ÑепоÑке пÑоÑоÑипов. ÐÑоÑоÑип обÑекÑа
userâ ÑÑоUser.prototype, и Ñам Ñоже Ð½ÐµÑ Ð¸Ñкомого ÑвойÑÑва. - ÐÐ´Ñ Ð´Ð°Ð»ÑÑе по ÑепоÑке, знаÑение
User.prototypeâ ÑÑо пÑÑÑой обÑекÑ{}, Ñей пÑоÑоÑип â вÑÑÑоеннÑйObject.prototype. - ÐаконеÑ, Ð´Ð»Ñ Ð²ÑÑÑоенного
Object.prototypeпÑедÑÑмоÑÑен вÑÑÑоеннÑйObject.prototype.constructor == Object. Таким обÑазом, ÑвойÑÑвоconstructorвÑÑ-Ñаки найдено.
РиÑоге ÑÑабаÑÑÐ²Ð°ÐµÑ let user2 = new Object('Pete').
ÐеÑоÑÑно, ÑÑо не Ñо, ÑÑо нам нÑжно. ÐÑ Ñ
оÑели ÑоздаÑÑ new User, а не new Object. ÐÑо и еÑÑÑ ÑезÑлÑÑÐ°Ñ Ð¾ÑÑÑÑÑÑÐ²Ð¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑа.
(Ðа вÑÑкий ÑлÑÑай, еÑли вам инÑеÑеÑно, вÑзов new Object(...) пÑеобÑазÑÐµÑ Ñвой аÑгÑÐ¼ÐµÐ½Ñ Ð² обÑекÑ. ÐÑо ÑеоÑеÑиÑеÑÐºÐ°Ñ Ð²ÐµÑÑ, на пÑакÑике никÑо не вÑзÑÐ²Ð°ÐµÑ new Object Ñо знаÑением, Ñем более, в оÑновном Ð¼Ñ Ð²Ð¾Ð¾Ð±Ñе не иÑполÑзÑем new Object Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑов).