美文网首页
js当中this的指向

js当中this的指向

作者: 我是何宝荣呀 | 来源:发表于2019-10-18 20:46 被阅读0次

普通函数的this是谁? window
对象.方法中的this是谁?当前的实例对象
定时器方法的this是谁?window
构造函数的this是谁?实例对象
原型对象的this是谁?实例对象
严格模式下的this,一定要指明是谁调用了他,谁调用了他,this就是谁,如何没有对象调用,则为undefined

注:所有自执行函数中,所有没有指定指向的this,都将指向window。
类似于下面
!function(){..........}();

~function(){..........}();

+function(){..........}();

-function(){..........}();

(function(){..........})();

都指向window

例题
var a = {
        name:"zhang",
        sayName:function(){
          console.log("this.name="+this.name);
        }
    };

    var name = "ling";

    function sayName(){
        var sss = a.sayName;
        /*
        function(){
          console.log("this.name="+this.name);
        }
         */
        
        sss();            //this.name = ling
        a.sayName();      //this.name = zhang
        (a.sayName)();    //this.name = zhang
        (b = a.sayName)();//this.name = ling
    }

    sayName();
var sex = "male";
    var saySex = {
        sex:"female",
        saySex:function(){
          function getSex(){
              console.log("this.sex="+this.sex);
          }
          getSex();
        }
    }

    saySex.saySex();         //this.sex = male
    var ccc = saySex.saySex; 
    ccc();//this.sex = male

var sex = "male";
    var saySex = {
        sex:"female",
        saySex:function(){
            function getSex(){
                console.log("this.sex="+this.sex);
            }
            
            getSex.call(this);
        //与例2只有这个地方的变化
        }
    }

    saySex.saySex();         //this.sex = female  call将tis改变成了saySex这个实例对象
    var ccc = saySex.saySex; 
    ccc();//this.sex = male
var name = "ling";
    function sayName(){
        var a = {
          name:"zhang",
          sayName:getName
        };
        
        function getName(){
          console.log(this.name);
        }
        
        getName();      //this.name = ling
        a.sayName();    //this.name = zhang
        getName.call(a);//this.name = zhang
    }
    sayName();
var name = "ling";
    var obj = {
        name:"zhang",
        sayName:function(){
          console.log("this.name="+this.name);
        },
        callback:function(){
          var that = this;
          return function(){
              var sayName = that.sayName;
              that.sayName();  //this.name = zhang
              sayName();//this.name = ling
          }
        }
    }

    function addEvent(obj,type,callback){
        if(obj.addEventListener){
        obj.addEventListener(type,callback,false);
        }else if(obj.attachEvent){
        obj.attachEvent("on"+type,callback);
        }else{
        var fn = obj["on"+type];
        obj["on"+type] = function(){
            fn && fn();
            callback();
        }
        }
    }

    addEvent(document,"click",obj.callback());
 var name = "window.name";
    var obj = {
        name : "obj.name",
        getName:function(){
            console.log(this.name);
            return function(){
                console.log(this.name);
            } 
        }
    }
    obj.getName()();  // obj.name   window.name

this的指向,只与调用它的对象有关,如果没有调用它的对象的话,那么就是window,这里是去除没有call、apply、bind改变指向的情况下,且注意,bind不会将函数运行一遍,而call和apply都会将函数运行一遍

题目参考是:
http://www.zhangyunling.com/251.html
也有一些是我在网上看到摘抄的!不懂的话就问我呀

相关文章

  • js当中this的指向

    普通函数的this是谁? window对象.方法中的this是谁?当前的实例对象定时器方法的this是谁?wind...

  • JavaScript当中的this究竟是个啥?

    对于JS的初学者而言,JS当中的this指向很难让人摸准其脉络,经常会给你一种模糊美、朦胧美的感脚!因为this并...

  • JS进阶篇-this指向问题

    JS中this的指向问题不同于其他语言,JS中的this不是指向定义它的位置,而是在哪里调用它就指向哪里。 JS中...

  • js的this指向

    参考文章:1.彻底理解js中this的指向,不必硬背https://www.cnblogs.com/pssp/p/...

  • JS this指向

    一、js中的四种调用模式s 构造函数调用:new Foo(); 对象方法调用:o.method(); 函数直接调用...

  • js this指向

    this指向调用该函数的对象 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不...

  • JS this指向

    首先,请牢记以下三点1. this指向的,只可能是对象!2.this指向谁,不取决于this写在哪!而是取决于函数...

  • JS this指向

  • java 有关this,apply使用

    js的call js的this指向改变 使用 java 的 apply

  • js中this问题小结

    在使用js中的this时,由于js的语法规则,this的指向是会改变的,js中的this指向是根据函数在执行时的作...

网友评论

      本文标题:js当中this的指向

      本文链接:https://www.haomeiwen.com/subject/ijmwmctx.html