JavaScript的call、apply、bind

 <script>
 
 // let a = {
 //     name : "懒羊羊",
 //     fn : function(){
 //         console.log(this.name);
        //     }
        // }
        // let b = a.fn;
       // b.fn();  为空
    //    call、apply的作用
    // 1、执行函数;2、改变this指向 3、可以传参数
    //call 传参:第一个参数是this的指向,
    //后面的参数都是 对应b函数的形参
    
    // let a = {
    //         name : "懒羊羊",
    //         fn : function(){
    //             console.log(this.name);
    //         }
    // }
    // let b = a.fn;
    // b.apply(a,["美美的","美羊羊"]);
 
    
    // let a1 = {
    //         name : "fei羊羊",
    //         fn : function(){
    //             console.log(this.name);
    //         }
    // }
    // let b1 = a1.fn;
    // b1.apply(a1,["美美的","美羊羊"]);

    //3、bind
    //作用:可以改变this指向,2、可以传入参数,3、不可以执行函数,返回一个新函数

    let a = {
            name : "懒羊羊",
            fn : function(adj, person){
                console.log(this.name + adj + person);
            }
    }
    let b = a.fn;
    // b.bind(a,["美美的","美羊羊"]);  //什么也没有
    let c = b.bind(a ,"美美的","美羊羊");
    // b.bind(a,"美美的","美羊羊")();
    // b.bind(a,"美美的")("美羊羊");
    // b.bind(a)("美美的","美羊羊");  //可以减少一下重复参数
    //方式一、二、三
    c();
    
    //区别:call和apply立马执行函数  bind不能执行函数,返回一个新函数
    //相同:都能改变this指向   都可以传参数
        //写一个源码  new的实现

 

        // function Beatifulsheep(){
        //     this.name = name,
        //     this.age = age,
        //     this.sec = sex
        // }
        // Beatifulsheep.prototype.sing = function(){
        //     console.log(this.name + "说,我会唱歌");
        // }
        // Beatifulsheep.prototype.cook = function(){
        //     console.log(this.name + "说,我会做饭");
        // }
        // let myy = new Beatifulsheep("美羊羊","22","女");
        // myy.sing();
        // myy.cook();

 

        //new的作用
        // 1、生成一个实例对象 (并且把函数内部的thia 指向实例对象)
        //2、运行改构造函数 初始化里面的属性赋值
        //3、把实例对象的原型链指向构造函数的原型对象

 

        //1、可以访问构造函数的属性
        //2、可以访问原型上的属性



        //1、可以访问构造函数的属性
        // function Person(){
        //     this.name = ["1",["2"]];
        // }
        // function child(){
        //     Person.call(this);
        // }
        // let c = new child();
        // c.name.push("111");
        // console.log(c.name);

 

        //2、可以访问原型上的属性
        // function Person(){
        //     this.name = ["1",["2"]];
        // }
        // function child(){
        //     Person.call(this);
        // }
        // let cc = new child();
        // cc.protety = Person.protety;
 

 

    </script>

JavaScript的call、apply、bind

上一篇:Android Bitmap Drawable byte[] InputStream 相互转换方法


下一篇:uinApp nvue如何使用阿里图标iconfont