It depends on how a function is called. If a function is not referenced through being an attribute of an object (e.g. refToMethod
) then it will be assigned the "Global context" which is window
. However, when a function is an attribute of object (e.g. obj.method
), we refer to it as a method, and it is implicitly assigned the context of it's parent object.
JavaScript's context is unlike many languages in that you can override it easily using either .call()
or .apply()
. Furthermore, ECMAScript 5 introduced a new .bind()
method to allow you to create copies of methods which are always bound to the same context. See MDN for more.
var obj = new Class();
obj.method(); // 1;
var unbound = obj.method;
unbound(); // undefined;
// Call and Apply setting the context to obj.
unbound.apply(obj); // 1
unbound.call(obj); // 1;
// ECMAScript 5's bind
var bound = unbound.bind(obj);
bound(); // 1;
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…