标签:
当一个函数被调用时,除了函数定义时显式声明的形参被赋值之外,还有一个隐式形参 ---- this ---- 也被赋值。
该参数指向一个与该函数调用隐式相关的对象,该对象被称为函数的上下文(function context),或者称之为调用上下文(invocation context)可能感觉会更清晰一些。
当作为函数调用
function ninja(){};
ninja();
这种情况下函数上下文就是全局上下文(global context) ---- the window object.
当作为函数调用时, 函数被定义在window对象,其实在原理上与函数被作为方法调用是一样的。
当作为方法调用
var o = {};
o.whatever = function(){};
o.whatever();
指向所属对象。
作为构造器调用
当构造器被调用时,发生以下行为:
一个新的空对象被创建
该对象作为参数被传递给构造器,并成为构造器函数的函数上下文
新对象作为构造函数的返回值被返回
通过apply() 和 call() 方法
juggle.apply(ninja1, [1,2,3,4]);
juggle.call(ninja2, 5,6,7,8);
可以显式定义函数调用时的上下文
参考文献:<Secrets of the JavaScript Ninja>
标签:
原文地址:http://www.cnblogs.com/patrickfly/p/4301275.html