解析js中的call
来源:互联网 发布:阿里云 网站 编辑:程序博客网 时间:2024/05/16 18:17
里面讲到call的使用方法,但是作者没有讲清楚里面的关系,我的理解是
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
原作者在这里举例是如下的例子,他的解释是: 这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
function Add(a, b) {
alert(this); //输出sub函数
alert(a + b);
}
function sub(a, b) {
alert(this);
alert(a - b);
}
Add.call(sub, 3, 1);
我在两个函数之间加上了alert(this),其实这两个函数Add和sub是属于全局对象的,那么在此Add.call(sub, 3, 1);就相当于Window.Add.call(Window.sub,3,1)。这样就很明显了,call的意思是切换上下文,执行call时,上下文切换至Window.sub,可以用alert(this)来进行调试,上下文虽然切换了,但是还是调用的Window.Add。这样理解就很清楚了。
如果不是很明白,请看下面的例子。
function Animal() {
this.name = "Animal";
this.Say = function () {
alert(this);
alert(this.name);
}
}
function Cat() {
this.name = "Cat";
}
var animal = new Animal();
var cat = new Cat();
animal.Say.call(cat,",");
这里加入了一些alert,便于调试,alert(this);---alert(this.name);这样的执行顺序,调用animal.Say时上下文已经切换到cat对象,所以this就指向的cat,
this.name就等于Cat了。
再回头看上面的,调用Add方法时,上下文切换至Sub方法,然并卵,还是执行的Add方法。原作者的举例不太恰当吧。
参考:http://uule.iteye.com/blog/1158829
- 解析js中的call
- 解析js中的call、apply、bind
- js中的call方法
- JS中的call()方法
- Js中的call方法
- js中的call函数
- js中的call与apply
- JS中的call和apply
- js中的call和apply
- JS中的Call和Apply
- js 中的apply和call
- js中的call及apply
- Js中的call和apply
- JS中的this、apply、call
- JS中的apply和call
- JS中的call、apply方法
- js中的call及apply
- js中的call()与apply()
- [wpf笔记] 1.xaml
- 左旋转字符串
- c#打包安装程序默认安装路径设置
- HDOJ1097 幂取模
- javascript需要知道的1
- 解析js中的call
- javascript的几种继承方式
- Linux-进程管理
- 归并排序
- Java并发机制深究1-synchronized和volatile
- [置顶]AutoFac使用
- 【DirectX11】第七篇 光照模型——环境光
- Ubuntu快捷键——终端
- C---int和指针转换注意事项