zoukankan      html  css  js  c++  java
  • JS中的this

    ㈠This是什么?

    解析器(浏览器在调用函数时,每次都会向函数内部传递进一个隐含的参数

        这个隐含的参数就是this,this指向的是一个对象

        这个对象我们称为函数执行的  上下文对象

    ⑵根据函数的调用方式的不同,this会指向不同的对象

           1.以函数的形式调用时,this永远都是window

           2.以方法的形式调用时,this就是调用方法的那个对象

    ⑶具体示例1:打印this

    function fun(){
    
         console.log(this);
    
    }
    
     fun();
    
    //创建一个对象
    
    var obj = {
    
           name:"孙悟空",
    
           sayName:fun
    
    };
    
    var obj2 = {
    
           name:"沙和尚",
    
           sayName:fun
    
    };
    
    //console.log(obj.sayName == fun);

    ①obj.sayName();

    
    

    ②obj2.sayName();

    效果如下:

    以obj调用,结果:

    以obj2调用,结果:

    ⑷具体示例2:打印this.name

    function fun(){
    
         console.log(this.name);
    
    }
    
     fun();
    
    //创建一个对象
    
    var obj = {
    
           name:"孙悟空",
    
           sayName:fun
    
    };
    
    var obj2 = {
    
           name:"沙和尚",
    
           sayName:fun
    
    };
    
    //console.log(obj.sayName == fun);
    
    ①obj.sayName();
    
    ②obj2.sayName();

    以obj调用,结果:

    以obj2调用,结果: 

     结论:this不是固定不变的,调用方式不同,对象就不同

    ⑸结合上面例子具体分析:

    var name = "全局的name属性";

    //obj.sayName();

    //以函数形式调用,this是window

    fun();

    结果:

    //以方法的形式调用,this是调用方法的对象

    obj.sayName();

    结果:

    obj2.sayName();

    结果:

    ㈡This实例

    this根据调用者的不同,变成不同的值,让我们的程序变得更加的灵活

    //创建一个name变量
    
    var name = "全局";
    
    //创建一个fun()函数
    
    function fun(){
           console.log(this.name);
    }
    
    //创建两个对象
    
    var obj = {
    
           name:"孙悟空",
    
           sayName:fun
    
    };
    
    var obj2 = {
    
           name:"沙和尚",
    
           sayName:fun
    
    };

    //我们希望调用obj.sayName()时可以输出obj的名字

    obj.sayName();

    结果:

    obj2.sayName(); 

    结果: 

    ㈢This的三种情况

    1.当以函数的形式调用时,this是window

    2.当以方法的形式调用时,谁调用方法this就是谁

    3.当以构造函数的形式调用时,this就是新创建的那个对象

  • 相关阅读:
    全代码实现ios-4
    集训第一次周赛题目及题解
    网站登录时密码忘记,通过向邮箱发送验证链接实现重置密码的实现方法
    hdu 1861-游船出租
    c#获取或修改配置文件
    今天做php经典实例,发现,我是对的,面试官给我说错了
    HDU 4637 Rain on your Fat brother 线段与半圆和线段交 简单题
    Qt之图标切分与合并
    标准容器的共性及举例
    如何提高数据库update更新的速度
  • 原文地址:https://www.cnblogs.com/shihaiying/p/12019763.html
Copyright © 2011-2022 走看看