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

    js中的this指向

    首先,js中的this指向是根据运行时确定的,而非定义时。

    js中的this指向大致分为如下几种:

    • 作为对象的方法调用
    • 作为普通函数调用
    • 构造调用
    • call、apply调用

    作为对象的方法调用

    var obj = {
      a: 1,
      getA: function(){
        alert ( this === obj ); // true
        alert ( this.a ); // 1
      }
    };
    obj.getA();
    

    作为普通函数调用(浏览器环境)

    window.name = 'globalName';
    var getName = function(){
      return this.name;
    };
    console.log( getName() ); // globalName
    

    或者

    window.name = 'globalName';
    var myObject = {
      name: 'sven',
      getName: function(){
        return this.name;
      }
    };
    var getName = myObject.getName;
    console.log( getName() ); // globalName
    

    构造调用

    var MyClass = function(){
      this.name = 'sven';
    };
    var obj = new MyClass();
    alert ( obj.name ); // sven
    

    一般情况下,构造调用时this指向new后的对象,但是有种比较特殊,就是当构造函数return一个对象时(必须是对象,其余类型比如string请忽略)指向该对象。

    var MyClass = function(){
      this.name = 'sven';
      return {
      name: 'anne'
      }
    };
    var obj = new MyClass();
    alert ( obj.name ); // anne
    

    返回一个普通字串:

    var MyClass = function(){
      this.name = 'sven'
      return 'anne';
    };
    var obj = new MyClass();
    alert ( obj.name ); // sven
    

    call、apply调用

    call、apply、bind可以人为改变function的this指向:

    var obj1 = {
      name: 'sven',
      getName: function(){
        return this.name;
      }
    };
    var obj2 = {
      name: 'anne'
    };
    console.log( obj1.getName() ); // sven
    console.log( obj1.getName.call( obj2 ) ); // anne
    
  • 相关阅读:
    结对编程——四则运算
    需求分析
    结对编程
    调查问卷的心得体会
    软件工程课初步目标
    软件工程课程建议
    结对编程--fault,error,failure
    结对编程--四则运算
    需求分析
    结对编程
  • 原文地址:https://www.cnblogs.com/vipzhou/p/8711343.html
Copyright © 2011-2022 走看看