2010-07-28 3 views

ответ

1

Да! Поскольку init является переменной mC, он будет обладать своей областью (в настоящее время это глобальная область, которая также является объектом window).

Однако. Если вы изменили к следующему:

var mC = function(map){ 
    this.init = function(iMap){ 
     alert("Init " + this + " with"); 
    } 
    this.init(map); 
}; 
var m = new mC({}); 

Тогда this внутри init будет ссылка на экземпляр.

+0

Речь идет о том, как вызывается функция, например. 'init();', не имеет * базового объекта * (не привязан как свойство любого доступного объекта), поэтому значение 'this' внутри него будет указывать на глобальный объект, независимо от того, где в цепочке * scope * ты. – CMS

1

Это потому, что init не является «методом класса» - это функция, которую вы определяете и вызываете внутри конструктора. Это не делает его особенным для других функций.

Вам нужно будет вызвать функцию инициализации в контексте функции эмси «это»:

init.call(this); 

Или, что вам нужно будет сделать «INIT» является членом той или this.prototype, которые будет автоматически использовать объект это член, как «это»

вы можете Google об этом ключевом слове в JavaScript, если это вас смущает :)

1

что еще вы бы ожидать, чтобы получить?

Вы определили init как функцию, а затем вызвали его в глобальном пространстве, поэтому вы получили то, что сделали. Вы не прикрепляли его к классу mC.

Смежные вопросы