zoukankan      html  css  js  c++  java
  • 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
     


    
    
  • 相关阅读:
    ORACLE中的TOP-N查询(TOP-N分析)、分页查询
    ORACLE复杂查询之子查询
    ORACLE复杂查询之连接查询
    利用rand7() 产生rand10()(腾讯)
    汉罗塔1(递归和分治)
    数位dp(不要62)
    数位dp(二进制01问题)
    多重背包
    模拟(所有边权)
    模拟(进制)
  • 原文地址:https://www.cnblogs.com/aqigogogo/p/7498171.html
Copyright © 2011-2022 走看看