javascript call方法的理解。

来源:互联网 发布:linux远程连接 ip 编辑:程序博客网 时间:2024/05/16 01:22

JS手册中对call的解释:

--------------------------

call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。

arg1, arg2,  , argN
可选项。将被传递方法参数序列。

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

 

-------------------------------------------

以下是例子。注释都是自己对call的理解。

<input type="text" id="myText"   value="input text">
<script>
    //类
    function Obj(){ this.value="对象!"; }
   
    var value="global 变量";
   
    //方法。作用就是使出全局变量value
    function fun1(){ alert(this.value); }
   
    window.fun1();
    //alert:global 变量
    //当前窗口对象调用fun1,fun1方法中的this指向的是window。
    //window的value就是全局变量value。所以输出的是“global 变量”
   
    fun1.call(window);
    //alert:global 变量
    //fun1.call(window);  call中传入的对象参数还是window。和调用他的对象一样。所以输出的还是“global 变量”。
   
   
    var txt=document.getElementById('myText');
    fun1.call(txt);
    //alert:input text
    //call中传入的是text对象。
    //fun1.call(txt);也等于 window.fun1.call(txt); 通过call 来改变调用fun1方法的对象。
    //也就是说,方法体内的this由原来指向的window改变为指向的是txt对象,
    //也可以被认为fun1成了对象txt的一个方法。或者说给txt增加了一个fun1的方法。方法内执行的是输入txt的value。alert出来的也就是txt的value
   
    //
//    txt.printTxt=function(){
//        alert(this.value)
//    }
//    txt.printTxt();
    fun1.call(new Obj());  
    //alert:对象!
    //测试fun1的this指向的是类Obj的一个实例对象。alert出的Obj的属性value值。
   
</script>