this
изменяется в зависимости от того, как вызывает функцию.Если вы укажете базовый объект , он будет ссылаться на него:
pretend_thing.sayHello()
Здесь pretend_thing
- это базовый объект, и поэтому this
по-прежнему ссылается на этот объект.С другой стороны, если у вас было:
var f = pretend_thing.sayHello;
f();
Здесь this
вместо этого должно ссылаться на window
объект.
Вы можете подтвердить это, введя:
console.log (this instanceof pretendThingConstructor);
Внутри вашей функции sayHello
.В обоих случаях будет напечатано true
.
pretendThingConstructor = function (greeting) {
this.greeting = greeting;
this.sayHello = function() {
console.log(this.greeting);
console.log(this instanceof pretendThingConstructor);
};
}
var pretend_thing = new pretendThingConstructor('hello world');
////////////////////////////
pretend_thing.sayHello();
setTimeout(function() {
pretend_thing.sayHello();
}, 3000);
выведет:
true
true
, тогда как:
var f = pretend_thing.sayHello;
f();
выводит:
false