javascript call 与 apply

先上几个简单的列子

function Obj() {
this.value = "对象!"
}
var value = "global变量";
function Fun1() {
alert(this.value);
}
var sObj = {
value : "javascript"
} ;
Fun1.call(this)//global变量
Fun1.call(sObj )//javascript
Fun1.call(new Obj() )//对象

在看定义

  它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别:

    apply(thisArg,argArray);

    call(thisArg[,arg1,arg2…] ]);

即所有函数内部的this指针都会被赋值为thisArg,这可实现将函数作为另外一个对象的方法运行的目的

apply的说明

如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 
thisArg任何一个参数,那么 Global 对象将被用作 thisArg 
并且无法被传递任何参数。

call的说明

call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisArg指定的新对象。
如果没有提供 
thisArg参数,那么 Global 对象被用作 thisArg

 

当嵌套在函数中时候this冒失又不一样

function Obj() {
this.value = "对象!"
Fun1.call(this);//domwindow
}

var value = "global变量";

function Fun1() {
alert(this.value);
}
Obj();//结果没有显示global变量

我的理解是这样的函数的作用域是在声明中定义的而不是在调用中定义的 

Fun1.call(this);//domwindow
obj()执行时在window中添加了一个value属性  值为 对象
类似于 window.value = "对象" 所以输出了 对象
但是手动添加一个window.value为何不能将其覆盖呢 很是不懂 呵呵!
posted @ 2011-12-01 14:33  孙海勋  阅读(396)  评论(0)    收藏  举报