#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. Спасибо! Да, я понимаю, что они не связаны или не вложены. Это то, что мне нужно — я пытался ограничить глобальные объекты, как вы упомянули. Я обновил заголовок сообщения, чтобы отразить это.