• Javascript:必须知道的Javascript知识点之“this指针”


    很多人都知道this指针,这篇文章的主要目的是为了培训我们公司的新人。

    默认的this指针指向

    规则1

    this指针默认指向方法调用时为其指定的对象,如:obj.fun(),fun方法体中的this指针指向obj。

    1 var user = { name: '段光伟' };
    2 user.getName = function(){ return this.name; };
    3 user.getName();  //返回‘段光伟’
    1 var user = { name: '段光伟' };
    2 user.getName = function(){ return this.name; };
    3 user.getName();  //返回‘段光伟’
    4 
    5 window.name = '李妞妞';
    6 window.getName = user.getName
    7 window.getName();  //返回‘李妞妞’
    8 getName();  //返回‘李妞妞’

    规则2

    如果在方法调用时没有为方法指定对象则this指针默认指向window,如:fun(),fun方法体中的this指针指向window。

    1 var fun = function(){
    2   return this;
    3 }
    4 fun();  //返回window对象

    规则3

    没有在方法体中的代码可以看作执行在一个匿名方法,根据规则2可以推论出其this指针指向window。

    1 this  //window对象

    改变this指针的默认指向

    使用apply

    1 var user = { name: '段光伟' };
    2 user.hi= function(message){ return this.name+':'+message; };
    3 window.name = '李妞妞'
    4 user.hi('你好');  //输出‘段光伟:你好’
    5 user.hi.apply(window, ['你好']);  //输出‘李妞妞:你好’

    使用call

    1 var user = { name: '段光伟' };
    2 user.hi= function(message){ return this.name+':'+message; };
    3 window.name = '李妞妞'
    4 user.hi('你好');  //输出‘段光伟:你好’
    5 user.hi.call(window, '你好');  //输出‘李妞妞:你好’

    构造函数中的this指向

    构造函数中的this指针默认指向执行正在构造的对象。

    1 var User = function(name){
    2    this.name = name;
    3 };
    4 User.prototype.hi = function(){
    5    return this.name;
    6 };
    7 var user = new User('段光伟');
    8 user.hi();  //输出‘段光伟’

    最后的小测试

    猜猜最后的输出时什么?

     1 var User = function(name){
     2     this.name = name;
     3  };
     4  User.prototype.hi = function(){
     5     return this.name;
     6  };
     7  var user = new User('段光伟');
     8  user.hi();  //输出‘段光伟’
     9 
    10 var hi = user.hi;
    11 
    12 hi();  //猜猜这里的输出

    object expression.method();会被翻译为object expression.method.call(object expression);。而var temp = object expression.method;temp();会被翻译为var temp = object expression.method;temp.call(window)。

  • 相关阅读:
    【TJOI2015】弦论 (后缀数组)
    再见,高中;你好,大学
    我亲爱的朋友们
    将容斥系数隐含在式子中的方法
    一个奇妙的斯特林数推导
    CSP2019游记
    CSP2019初赛游记
    NOI2019游记
    老年选手康复训练
    CTS/APIO2019 游记
  • 原文地址:https://www.cnblogs.com/happyframework/p/3036375.html
Copyright © 2020-2023  润新知