• 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结合使用

     附件下载

  • 相关阅读:
    flask多线程多协程操作
    flask介绍
    centos django+Nginx+uwsgi部署
    centos下运行python3.6+Django+mysql项目
    centos虚拟机下安装nginx
    redis安装
    路飞学城课程_课程详细_作业点评
    redis使用方式
    git命令学习
    组合&多态&封装
  • 原文地址:https://www.cnblogs.com/sntetwt/p/2993176.html
Copyright © 2020-2023  润新知