JS高级-day11-补充this指向 全局函数的指向,检测数...

一, 补充

1. this的指向

全局函数的指向 window

    <script>
        /* 
        一般来说 this的指向 判断依据 谁调用了 函数  this 指向谁 
  
        其实  当我们定义了全局的函数的时候,默认是挂载到了window 全局变量上  
        全局函数 其实就是 window的一个属性而已 只不过 平时写代码的时候 可以省略这个window
  
        小结
        1 当我们定义全局的函数的时候 本质是给window添加了一个 属性(函数类型)
        2 当我们调用这个函数 的时候  abc()  本质  window.abc() -- window 可以被省略而已  
         */
  
         function abc() {
            console.log("ABC");
            console.log(this);
          }
         // window.abc = function () {
         //   console.log('ABC');
         //   console.log(this);
         // };
  
        // window.abc();
       abc();
       const obj ={
         username:"悟空",
         say(){
           console.log(this);
         }
       }
  
      // say();
      </script>

箭头函数的指向 没有 this

<body>
    <button>点击</button>
    <script>
      /* 
      1 箭头函数没有内部的this 
      2 当你的函数执行体代码中  有出现了 this 慎用 箭头函数!!  - 遵循!! 
      
      
       */
      // const obj = {
      //   username:"悟空",
      //   say:()=>console.log(this)
      // }
      // const func = () => console.log(this);

      const button=document.querySelector("button");
      button.addEventListener("click", ()=> {
        // this.innerText="被修改哈"
        console.log(this);
        
      })
    </script>
</body>

修改箭头函数的执行 bind、call、apply

    <script>
        /* 
        1 bind 、call 、  apply  修改 this的指向 
          1   call 和  apply  会在调用原函数的同时也修改this的指向 
          2   bind会帮你修改this指向 但是 不会直接调用原函数 而是会返回一个 修改了this指向 的新函数 
          3   call 和  apply 区别 传递参数的方式不同而已
              obj.say.call(newObj,1,2)
              obj.say.apply(newObj,[1,2])
            
  
  
        2 默认情况下  this的指向   -  谁调用了我 this 指向谁 
         */
  
        const obj = {
          username: '悟空',
          // say() {
          //   console.log(this.username, 'obj中的say方法 ');
          // },
          say(a, b) {
            console.log(a, b);
          },
        };
  
        const newObj = {
          username: '八戒',
        };
  
        // obj.say.call(newObj);//  八戒    obj中的say方法
        // obj.say.apply(newObj);//  八戒    obj中的say方法
        // const fn = obj.say.bind(newObj); //  返回一个新的函数  新函数内部 修改this指向的功能
  
        // obj.say.call(newObj,1,2) ;
        // obj.say.apply(newObj,[1,2]) ; // 参数必须要以数组的形式来传递
        const fn = obj.say.bind(newObj);
        fn(1, 2);
      </script>

2. 检测数据类型

  1. 检测简单 基本的数据类型 使用 typeof

    // 使用方法
    typeof ""  
    
  2. 检测 复杂 引用 的数据类型 intanceof

// 使用方法
p1 intanceof Person  
  1. 案例

        <script>
            //  基本的数据类型 typeof
            //  引用数据类 intanceof
            //   检测 你是不是 你爸爸亲生!!   检测 这个实例是不是被某个构造函数 new 出来 
      
      
            // console.log(typeof '');
            // console.log(typeof 1);
      
            class Person {}
            class SuperPerson{}
            const p1 = new Person();
            const s1 = new SuperPerson();
      
            console.log(p1 instanceof Person);//  true
            console.log(p1 instanceof SuperPerson); // false 
      
    
           
          </script>
    

3. 原型链

   <script>
      function Person() {}
      Person.prototype.add = function () {};
      Person.prototype.remove = function () {};
      Person.prototype.clear = function () {};

      function YellowPerson() {}
      // YellowPerson.prototype.add= Person.prototype.add;
      // YellowPerson.prototype.remove= Person.prototype.remove;
      // YellowPerson.prototype.clear= Person.prototype.clear;

      // 让儿子的原型 指向 父亲的原型
      // newObj = obj ;
      // YellowPerson.prototype = Person.prototype;
      // 对象复制
      YellowPerson.prototype = { ...Person.prototype };
      YellowPerson.prototype.cunstructor = YellowPerson;
      const yp = new YellowPerson();
      console.log(yp);

      // YellowPerson.prototype.aabbcc = function () {};

      // const p1 = new Person();
      // console.log(p1);
    </script>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容