zoukankan      html  css  js  c++  java
  • this的指向

    this的指向

    对于一些刚刚学习js的小萌新来说,看到this绝对会是比较头疼的事情,因为不知道他到底指向谁,从而看不懂别人写的代码,希望我的这篇博客会对大家有所帮助,同时也整理一下自己理解的思路,如果有任何不对的地方,欢迎反馈.

    this有四大环境(调用模式)下的指向,在我们判断this的到底代替谁之前,必须确定当前this的环境,this就像一个变色龙,根据环境不同指向也不同

    1. 函数调用
    function fn(){
                console.log(this); //打印看一下this,发现this指向window
            }
            fn();  //可以理解为window.fn();

           2.构造函数调用模式

    function Person(name,age){

    this.name = name,

    this.age = age,

    this.say = function(){

    console.log(this);

    }

    }

    var p = new Person("二狗",20);

    p.say(); //打印出来的是p这个实例对象

    var q = new Person("狗蛋",21);

    q.say(); //打印出来的事q这个实例对象

     3.对象调用模式

    其实构造函数里的this.name等一些的this也是指向实例对象

     var obj = {
                name : "zs",
                age : 18,
                say : function(){
                    console.log(this);  //指向obj
                }
            }
            obj.say(); //因为是obj这个对象去掉用的say方法
    
    var arr = [obj,function(){console.log(this)},2];
            arr[0].say();  //这里指向就是obj
            arr[1](); //指向的是arr
            //再看看这个
            obj['say']();//这里是用了对象的[]语法,实际上与.语法一样的所以是对象调用模式,指向的是obj,而不是window
    

      

          4.上下文调用模式

    这个模式虽说叫上下文,但我个人感觉叫借用这个名字更容易理解

    作用:改变this的指向

    使用场景:借用其他类型的方法,自己又没有这个方法

    方法:call  apply  bind,根据不同的情况指向也不同,具体用法请查看百度

  • 相关阅读:
    WPF 之 布局(一)
    CSS 之 内层div填充margin,外层div的背景色不会覆盖该margin
    T-SQL 之 多表联合更新
    jQuery
    Joomla, Wordpress, Drupal 全面详细Pk比较-转载
    js ==与===区别(两个等号与三个等号)
    Jquery DataTables 自定义布局sdom
    Jquery DataTable
    解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
    firedebug调试Jquery
  • 原文地址:https://www.cnblogs.com/wchjdnh/p/10170762.html
Copyright © 2011-2022 走看看