Добавление конструктора к свойству «родительского» объекта

#javascript

#javascript

Вопрос:

Можно ли это сделать?

 var MyObj = function() {};
var MyObj.prototype.thing = function() {};

MyObj.SubObj = function() {}
MyObj.SubObj.prototype.thing = function() {}

var ins = new MyObj();

var another = new MyObj.SubObj();
 

В этом коде myObj действует как родительский класс, потому что я назначил myObj.SubObj — это другая функция-конструктор с собственной цепочкой прототипов.

Можно ли вложить конструктор из другого конструктора, подобного этому?

Ответ №1:

Это совершенно нормально, но это не делает ничего особенного. В частности, нет никакого отношения наследования между MyObj и MyObj.subobj , MyObj.prototype.thing и MyObj.subobj.prototype.thing функции and никоим образом не связаны.

Я бы также не назвал это вложенностью. Единственная связь здесь заключается в том, что это subobj свойство функции MyObj . Он не вложен в него каким-либо образом…

Но это вполне нормально делать, как организационная вещь (например, чтобы избежать большого количества глобальных символов), при условии, что наследование не подразумевается.


Примечание: подавляющее соглашение в JavaScript заключается в том, что функции конструктора, подобные этим, используют initially-capped CamelCasing , чтобы отличать их от обычных функций (используя non-capped camelCasing ). Ранее у вас был myobj и subobj . Вы изменили первый на MyObj , но если следовать этому соглашению, вы subobj бы SubObj также изменили на (просто FWIW).

Комментарии:

1. Спасибо! Да, я понимаю, что они не связаны или не вложены. Это то, что мне нужно — я пытался ограничить глобальные объекты, как вы упомянули. Я обновил заголовок сообщения, чтобы отразить это.