首页 > 技术文章 > call apply 使用

rhythmK 2014-09-11 20:09 原文

1、call 跟 apply的主要区别:

 call传入参数是一个一个传入,而 apply 使用的是数组传入

 call(obj,arg1,arg2,arg3,arg4)

 apply(obj,[arg1,arg2,arg3,arg4]);

2、使用场景:

   2.1 方法调用:

          

  var say=  function (msg)
        {
            console.info("Say:" + msg);
        }
        var man = function (_name)
        {
            this.name=_name;
        }

       

        var m = new man("rhythmk");
        say.call(m, m.name);
        //Say:rhythmk 

 

   2.2 类继承:

        var poper = function (_name)
        {
            // 继承
            /*
               call(替换对象,参数1,参数2,参数3)
               也可以通过call实现多继承
            */
            man.call(this, _name);
        }

        var p = new poper("pname");
        console.log(p.name);



        console.error("开始验证 call 跟 apply 区别:");


        var animal = function (_name, _age, _type)
        {
            this.name = _name;
            this.age = _age;
            this.type = _type;
            this.show = function () {
                var msg = this.name + ",age:" + this.age + ",type:" + this.type;
                console.log(msg);
            };
        }

        var dog = function (_name, _age) {
            animal.call(this, _name, _age,'dog');
        }
        var pig = function (_name, _age) {
            animal.apply(this, [_name, _age,'pig'])
        }

        var d1 = new dog("d1", 12);
        d1.show();

        var p1 = new pig("p1", 10);
        p1.show()

 

推荐阅读