从零开始学_JavaScript_系列(29)——apply和call

来源:互联网 发布:王菲演唱会网络直播 编辑:程序博客网 时间:2024/06/09 03:15

讲道理说,这两个方法在开发中直接使用的并不多(当然也可能是我比较低端┑( ̄Д  ̄)┍),一般都用封装好的。


(47)apply和call

这个之前没研究过,今天简单的看了一下。

命令

简单介绍

例子

apply

将某个函数提供给另外一个对象使用,类似继承

提供的方法.apply(获取方法的对象, 参数);

call

改变函数中this指向的对象

方法.call(被this指向的目标, 传给方法的参数).

 

共同点:两个都是函数对象的方法。

 

call的说明:(略微修改自他人的博客,博客链接下附)

 

<!doctype html><html><head></head><body><input type="text" id="idTxt" value="input text"><script type="text/javascript">    var value = "global var";    function mFunc() {        this.value = "member var";    }    function gFunc() {        alert(this.value);    }    window.gFunc();                                 // 全局的值    gFunc.call(window);                             // 全局的值,this指向参数    gFunc.call(new mFunc());                        // this指向mFunc    gFunc.call(document.getElementById('idTxt'));   // this指向这个dom结点</script><script language="javascript">    var func = new function () {        this.a = "func";    }    var func2 = function (x, y) {        var a = "func3";        alert(this.a);        alert(x);        alert(y);    }    func2.call(func, "func2", 'func3');     //this指向func这个函数,x是传递的参数</script></body></html>


关于用call来进行继承(同样改自某博客的例子)

<!doctype html><html><head></head><body><script type="text/javascript">    function baseA()        // base Class A    {        this.member = "baseA member";        this.showSelfA = function()        {            window.alert(this.member);        }    }    function baseB()        // base Class B    {        this.member = "baseB member";        this.showSelfB = function()        {            window.alert(this.member);        }    }    function extendAB()     // Inherit Class from A and B    {        baseA.call(this);   // call for A        baseB.call(this);   // call for B        // this指向的是extentAB这个方法,这里相当于将上面两个方法都执行了一遍,        // 由于后调用的baseB,而两个都有member属性,因此后调用的baseB的member覆盖了baseA的member,        // 但showSelfA和showSelfB没有冲突,因此两个方法都在        // 这种写法相当于形成了一个继承的形式。    }    window.onload = function()    {        var extend = new extendAB();        extend.showSelfA();     // show A        extend.showSelfB();     // show B    }</script></body></html>

 

博客链接:

http://blog.csdn.net/sunboy_2050/article/details/6592082

 

 

apply可以参照这个(我之前写的):

apply是函数对象(function Function(){})的prototype方法中的一个方法

可以通过console.dir(Function)来打印全部方法

又因为所有函数都继承于Function函数,因此,所有函数都继承了这个方法。

apply的功能是,函数借用。将函数借用给一个对象,帮助他实现函数所定义的逻辑的功能。

如例子:

function ab(x, y) {    this.x = x;    this.y = y;}ab.prototype.move = function (x, y) {    this.x += x;    this.y += y}var c = new ab(1, 1);console.log(c);c.move(2, 2)console.log(c);p = {x: 0, y: 0, z: 0}console.log(p);c.move.apply(p, [5, 5])    //在这步,ab的实例c将move方法提供给了p,参数是数组console.log(p);


输出结果为:

ab {x: 1, y: 1}

ab {x: 3, y: 3}

Object {x: 0, y: 0, z: 0}

Object {x: 5, y: 5, z: 0}

 

注:如果c中没有y,那么在
0 0
原创粉丝点击