Когда я объявить новый тип объекта:JavaScript - Что это значит?
var MyType = function(constructorArg) {
this.whatever = constructorArg;
};
var myTypeInstance = new MyType('hehe');
В этом случае this
относится к функции, назначенной на MyType
.
Теперь давайте добавим простой аксессор для свойства whatever
(без использования прототипа):
var MyType = function(constructorArg) {
this.whatever = constructorArg;
this.getWhatever = function() {
// Here this should logically point to the function assigned
// to this.whatever instead of the current instance of MyType.
return this.whatever;
};
};
Это работает правильно?
Но почему нет this
, внутри тела функции, присвоенной свойству whatever
, не указывая на эту функцию?
Благодарим за помощь!
EDIT
: Я изменю мой пример:
var MyType = function(arg) {
this.property = arg;
this.MySubType = function(subTypeArg) {
this.subTypeProperty = subTypeArg;
// What is "this" refereing to here ?
// To the instance of MyType, or to the instance of MySubType ?
// I know it would not make sense to do something like this in real world
// but i'm trying to have a clearer understanding of the way "this" is set.
};
}
EDIT
: Как сказано в комментариях:
При использовании
myTypeInstance.MySubType('hehe');
, то это относится к myTypeInstance.
При использовании
var mySubTypeInstance = new myTypeInstance.MySubType('hehe');
то это относится к mySubTypeInstance
Если я хорошо понимал.
* «В этом случае' this' относится к функции, назначенной 'MyType'. * * Нет! Если вызывается с 'new',' this' относится к новому объекту, который наследуется от 'MyType.prototype'. 'this' ** never ** относится к самой функции *, если * вы явно не вызываете функцию таким образом (то есть' func.call (func) '). Пожалуйста, ознакомьтесь с [документацией MDN о 'this'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this), он дает хороший обзор о том, как это сделать работает. –
Да, извините, вот что я имел в виду, это относится к экземпляру. Итак, к чему относится «это» в аксессуре? Он должен ссылаться на экземпляр, созданный с использованием 'var instance = new this.whatever();' right? – Virus721
Нигде. Но если 'this.whatever' был« подтипом »вместо аксессора, должна ли ссылка« this »указывать на экземпляр этого подтипа вместо экземпляра« MyType »? – Virus721