精通Javascript 之 上下文对象

来源:互联网 发布:网络创业理论与实践 编辑:程序博客网 时间:2024/04/28 19:21
理解上下文对象是理解JS面向对象的基础。上下文对象是通过this变量体现的,这个变量永远指向当前代码所处的对象中,全局变量其实是window对象的属性。看一个上下文对象操作的简单的例子:
//********************************************************* //在上下文对象内使用函数并将其上下文对象切换为另一个变量 //********************************************************* var obj = { yes: function(){ this.val = true; }, no: function(){ this.val = false; } }; // 这个时候obj对象中没有val这个变量 alert( obj.val == null ); // 执行yes函数之后,val变量和obj对象联系起来 obj.yes(); alert( obj.val == true ); // 我们把window.no指向obj.no并执行 window.no = obj.no; window.no(); // obj.val的值并没有变,而且window里有了val变量且值为false // 因为window.no在执行的时候上下文是window alert( obj.val == true ); alert(window.val == false);
但是我们在把obj.no的上下文对象切换为window时,代码变得不好理解了。JS提供了call和apply两个方法,可以用于实现这一功能。我们把上边的代码里的window.no = obj.no; window.no(); 替换成 obj.no.call(window);或者obj.no.apply(window);会得到同样的结果