zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    React 创建一个自动跟新时间的组件
    React 组件传值 父传递儿子
    React 以两种形式去创建组件 类或者函数(二)
    React 语法基础(一)之表达式和jsx
    ref的使用
    使用scale等比例缩放图片
    Vue动态加载图片图片不显示
    div里面的元素在【垂直 方向】上水平分布 使用calc()函数动态计算
    控制label标签的宽度,不让它换行 label标签左对齐
    表单验证
  • 原文地址:https://www.cnblogs.com/happyframework/p/3036375.html
Copyright © 2011-2022 走看看