• 关于javascript this问题


    this是Javascript语言的一个关键字。 
    它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。例如:

    function person() {    
            this.name = 'jack';
            this.age  = 12;          
        }

    函数使用场合的不同,this的值也会发生相应变化。但是有一个总的原则,那就是this指的是,调用该函数的那个对象。 

    下面来说说this的用法。 

    function person() {    
            this.age = 12;    
            alert(this.age);    
        }
    
        person(); // 12

    这个是通常的用法,this代表全局对象Global,实则,person的调用是   window.peroson()    this-》window

    var age = 12;
        function person() {       
            alert(this.age);    
        }
    
        person(); // 12

    我们可以看一下 ,将age在全局声明,结果仍是12;

    那我们再来变一下:

    var age = 12;
        function person() {
            this.age = 10;       
            alert(this.age);    
        }
        person();
        alert(age) // 10

    =============================================================

    function person() {     
            alert(this.age);    
        }
        var obj = new Object();
        obj.age = 10;
        obj.fn = person;
        obj.fn();

    上面我们创建一个空对象 给对象的age属性赋值,对象的方法就是person,直接调用 ,此时this的调用对象是obj,obj的age是10;

    ===========================================================

    function person() {     
            this.age = 10;    
        }
        var obj = new person();
        alert(obj.age)

    我们来用person创建一个构造函数  此时函数生成一个新的对象,很多人可能不太明白这个对象的由来:

    function person() {  
            var obj = new Object(); 
            obj.age = 10;  
            return obj;
        }
        // var obj = new person();
        alert(person().age)

    这样写会不会看起来一下豁然开朗呢?原来当我们new person()的时候,perison内部会自动创建一个空对象赋值给this,然后再返回this。所以自然就可以用新创建的构造函数去操作了!

       var age = 12;
        function person() {       
            this.age = 10;      
        }
        var obj = new person();
        alert(age) //12

    而此时age的值是12 ,不难看出,这时的age已经并不是全局的了。当然如果把构造函数干掉 变成window.person();age依然是全局,想必大家已经明白了this的用法了

    ==========================================================

    var age = 12;
        function person() {       
            alert(this.age);      
        }
        var obj = new Object();
        obj.age = 10;
        obj.fn = person;
        obj.fn.apply();//12

    最后说一下,apply和call吧,改变this指向,像这样obj.fn.apply(obj) 括号内放this要指向的对象。这样对象指向obj结果将会是obj的age

    文笔粗糙,如有错误,忘大神指正。 

  • 相关阅读:
    【42.38%】【BZOJ 3196】二逼平衡树
    【7.89%】【BNUOJ 52303】Floyd-Warshall
    【37.38%】【codeforces 722C】Destroying Array
    【57.14%】【codeforces 722B】Verse Pattern
    【26.34%】【codeforces 722A】Broken Clock
    HNOI2008越狱(快速幂)
    HNOI2010弹飞绵羊
    JSOI2008最大数(线段树)
    ZJ2008树的统计(树链剖分)
    SDOI 2010 and SXOI 2014 地精部落 (递推)
  • 原文地址:https://www.cnblogs.com/Midaoi/p/4941306.html
Copyright © 2020-2023  润新知