Есть три разных вопроса:
1) Вы не создаете объект с new Main()
, но пытаются получить доступ свойство Sub
непосредственно от конструктора. Это не работает. Вы должны создать экземпляр:
var main = new Main();
main.Sub; //<-- now you can access it
2) Вы пытаетесь получить доступ к свойству my_object
с this
, но вне какой-либо функции. Это тоже не работает. this
, вероятно, укажет на объект окна, который не имеет никакого свойства, называемого my_object
. Решение может заключаться в том, чтобы написать main.my_object
, но это может привести к поражению цели прототипа. Обычно вы добавляете туда функции или свойства, которые одинаковы для каждого экземпляра. Но вы пытаетесь разместить там свойство, которое должно быть разным для каждого экземпляра. Так это выглядит, как вам не нужно, чтобы получить доступ к прототипу на всех, но можно просто определить его как обычные собственности:
function Main()
{
this.my_object = {"key":123};
this.Sub = new Sub(this.my_object);
}
3) Линия main.Sub
ничего не выполняет. Вы просто запрашиваете недвижимость Sub
. Вместо этого функция Sub
будет выполнена, когда вы напишете new Sub(...)
.Поэтому, если вы хотите что-то предупредить, вызывая функцию, вам нужно определить функцию. Можно, например, определить метод предупреждения в Sub
или Sub.prototype
, а затем вызвать этот метод:
function Sub(obj)
{
this.alert() {
alert(obj);
}
}
main.Sub.alert();
updated Fiddle
Что актуальная проблема вы пытаетесь решить? 'Main' - это объект функции. Если вы хотите иметь доступ к 'Main.Sub', вам нужно сначала назначить' Main.Sub'. –
'new Sub (this.my_object);', 'this' относится к объекту' window' здесь. –