javascript中的call()和apply()方法 - 原创实例

本文深入解析JavaScript中的call与apply方法,详细解释其用途、区别及使用方式,并通过具体实例演示如何在实际开发中灵活运用。

 

1、方法定义

 

call方法: 
语法:call([thisObj,arg1, arg2,arg……n]) ,参数arg只能为列表的形式,如:a,b,c
定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
说明: 
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

apply方法: 
语法:apply([thisObj,[argArray,arguments]]) ,参数age只能为数组或arguments的形式,如:[a,b,c]或arguments
定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
说明: 
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。 

 

 

 

2、常用实例

 

        function User(name,age){//定义一个User方法
            this.name = function () { alert(name) }; ;
            this.age = function () { alert(age) };     
        }

        function CallUser(name, age) {//为CallUser方法,添加成员
            User.call(this, name, age); //如果用apply则为:User.apply(this, [name, age]);  
            //User.call指来添加到this的对象,this指当前对象,当然这里的this也可以换成其它对象。后面的name,age分别指User函数的实参。  
            //这里的call相当于CallUser.protype=new User();
        }

        var us = new CallUser("Sn", 20); //实参"Sn",20传给CallUser函数。CallUser的name,age再传给User函数     
        us.name();//Sn
        us.age();//20

 3、apply与protype结合使用

 

 var Class = {                                    //创建Class对象(字面量)
            app: function () {                      //创建一个名为app类(Function)
                return function() {
                    this.init.apply(this, arguments); //当前this为function,继承于init属性,参数为arguments
                }
            }
        }

        var pro = Class.app();                      // 创建一个名为pro类,些类被Class.app()赋值,(Function)  
        pro.prototype = {
            init: function (arget) {                // 定义pro类下的一个成员init,此成员用于实现Class类的init
                this.arget = arget;
            },
            fn:function(){
                alert(this.arget);
            }
        }

        var obj = new pro("apply与protype结合使用");
        obj.fn(); //结果:apply与protype结合使用

 

 附件下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值