JavaScript closure and the this object

点点圈 提交于 2019-12-01 18:04:46
Alnitak

As soon as you call:

return func(par);

You're creating a new scope (with its own this) and in this case because you haven't specified an object, this === window usually or undefined in strict mode. The called function does not inherit whatever this was in the calling scope.

Ways to set a value for this are:

myobj.func(par);  // this === myobj

or

func.call(myobj, ...)  // this === myobj

There are also:

The value of this depends only on whether you call the function as a method or as a function.

If you call it as a method, this will be the object that the method belongs to:

obj.myFunction();

If you call it as a function, this will be the window object:

myFunction();

Note that even if you are in a method that belongs to an object, you still have to call other methods in the object using the method syntax, otherwise they will be called as functions:

this.myOtherFunction();

If you put a method reference in a variable, you will detach it from the object, and it will be called as a function:

var f = obj.myFunction;
f();

The call and apply methods are used to call a function as a method even if it's not a method in the object (or if it's a method in a different object):

myFunction.call(obj);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!