zoukankan      html  css  js  c++  java
  • Javascript中call和apply

    在上一章http://www.cnblogs.com/meiyh/p/6207671.html 我有提到javascript很重要的this关键字,现在我们结合这个关键字使用的下面的两个关键字:

    • call(对象,参数...)  
    • apply(对象,[参数])


    以上代码我们来改成call和apply写法:

            var a = { num: 4 };
            var b = { num: 8 };
            a.sum = function (count) {
                this.num += count;
                return this.num;
            };
             
            console.log(a.sum(3));//7
              
            console.log(a.sum.call(b, 1));//9
              
            console.log(a.sum.apply(b, [1]));//10

    所以call和apply可以指定传入的对象,这样相同的方法体可以被不同的对象所使用,从而使代码简洁优雅~

    而且不知道大家发现没有,一旦有了这种指定对象传入的用法可以偷用别人的方法,比如下面这个arguments本身没有shift方法,通过call 实现将对象换成arguments来调用.

           function Foo() {
                var s = Array.prototype.shift;
                console.log(s.call(arguments)); //1
            }
            Foo(1, 2, 3, 4);

    就像之前发现的,Javascript中的一个对象的方法只是作为属性附在对象上的函数。所以将一个对象上“偷”方法给另一个,只须将对象的this属性从“原对象”改成现在的“小偷”也就是当前调用的对象。这就完美实现了偷取方法为己所用,所以说Javascript

    可塑性极强。尔等还要继续体验它的强大使用技巧。

  • 相关阅读:
    Xen虚拟机的创建和启动
    Linux Shell编程基础
    虚拟化的概念
    Android XML解析
    Android数据存储之文件存储
    Android GPRS开关软件(APN开关)
    数据中心
    debian下dos2unix的安装
    linux Shell重定向
    GPRS开关软件一些问题的解决方法
  • 原文地址:https://www.cnblogs.com/meiyh/p/6214635.html
Copyright © 2011-2022 走看看