• this


    (1) /*通过this传递了对象的引用*/
        function identify() {
            console.log(this); //this指向不是window 而是call改变指向的对象
            return this.name.toUpperCase();
    
        }
        function speak() {
            var greeting ='hello i am'+identify.call(this);
            return greeting;
    
        }
        var you={
            name:'zhangsan'
        };
        let me={
            name:'hxq'
        };
    //    console.log(identify.call(me));
    //    console.log(identify.call(me)); //HXQ
    //    console.log(identify.call(you)); //ZHANGSAN
    
        console.log(speak.call(me)) //HXQ
    
    
    (2))
    !(function () {
        /*误解:this指向函数本身*/
        function fn(n) {
            console.log(n);
            this.count++;//NAN
        }
        fn.count=0;
    
    
        var i;
        for (i=0;i<10;i++){
            if(i>5){
                fn(i);
            }
        }
        console.log(fn.count);//o
    })()
    /*隐式绑定*/
        function foo() {
            console.log(this.a);
        }
        var obj={
            foo:foo,
            a:2
        }
        obj.foo() //2
        var fn=obj.foo; //undefined
    function foo() {
            console.log(this.a); //42
        }
        var obj2 = {
            a: 42,
            foo: foo
        }
        var obj1 = {
            a: 2,
            obj2: obj2
        }
        obj1.obj2.foo()
    
    
    //硬绑定 强行把foo中的this绑定在对象上
        function foo() {
         console.log(this.a);
         }
         var obj = {
         a: 2
         };
         var bar=function () {
         foo.call(obj);
         }
         bar(); //2
         setTimeout(bar,1000);//2
         bar.call(this);//2
         bar.call(window);//2
    
    
    
    function foo(sm) {
            console.log(this.a,sm);
            return this.a + sm
    
        }
        var obj={
            a:2
        }
        var bar=function () {
            return foo.apply(obj,arguments); //用apply改变this指向并且传参(参数为一个对象)
        }
        var b=bar(3); //2,3
        console.log(b);//5
     


    
    
  • 相关阅读:
    原型模型
    单例模式
    C# 委托 delegate
    C#泛型
    客户端注册Cannot execute request on any known server解决
    SpringCloud 学习(二)-2 :Securing The Eureka Server
    SpringCloud 学习(二)-1 :服务注册与发现Eureka扩展
    解决网速慢时maven仓库访问慢
    SpringCloud 学习(二) :服务注册与发现Eureka
    SpringCloud版本问题
  • 原文地址:https://www.cnblogs.com/aqigogogo/p/7498171.html
Copyright © 2020-2023  润新知