js中this是什么,如何改变this指向

js中this是什么
定义:this是包含它的函数作为方法被调用时所属的对象
说明:1、包含它的函数2、作为方法被调用时3、所属的对象
例1:

 function fu() {
            var a = 10
            console.log(this)//window
        }
        fu();
此时this的指向是window

例2:

var aa = {
            names: '张新苗',
            fu: function () {
                console.log(this)//此时this的指向是整个aa
                console.log(this.names);//张新苗  因为这个names在aa里
            }
        }
        aa.fu()//

如果一个函数中有this,这个对象被上一级对象调用,那么this就指向它的上一级对象

例3:

  var aa={
            names:'张新苗',
            bb:{
            //   names:'章绘绘',
              fu:function(){
                console.log(this)//此时this指向整个bb 
                console.log(this.names)//undefined  因为此时整个bb里并没有names所以是undefined 
              }  
            }
        }
        aa.bb.fu()

例5:

 var aa={
            names:'张新苗',
            bb:{
              names:'章绘绘',
              fu:function(){
                console.log(this)//此时this指向整个bb 
                console.log(this.names)//章绘绘 因为这个names在bb里
              }  
            }
        }
        aa.bb.fu()

例6:

  var aa={
            names:'张新苗',
            bb:{
              names:'章绘绘',
              fu:function(){
                console.log(this)//此时this指向window
                console.log(this.names)//undefined 因为window里找不到这个names
              }  
            }
        }
      var cc=aa.bb.fu
      cc()

如和改变this指向

 var aa = '张玉芯'
        var obj = {
            aa: this.aa, //此时this是指外面的
            cc: '美女',
            dd: function (a, b) {
                console.log(`${this.aa}是个大${this.cc}而${a}更是个${b}`) //张雨芯是个大美女而undefined更是个undefined
            }
        }
        var newobj = {
            aa: '曹慧洁',
            cc: '美女'
        }
        obj.dd.call(newobj)//曹慧洁是个大美女而undefined更是个undefined
此时this指向已改变

改变this指向的方法

 var aa = '章绘绘'
        var obj = {
            aa: this.aa, //此时this是指外面的
            cc: '美女',
            dd: function (a, b) {
                console.log(`${this.aa}是个大${this.cc}而${a}更是个${b}`) //章绘绘是个大美女而undefined更是个undefined
            }
        }
        var newobj = {
            aa: '曹慧洁',
            cc: '美女'
        }
     obj.start.call(newobj, '张雨芯', '美女'); //xx.call(新指向,后面可以直接加参数)   //曹慧洁是个大美女而张玉芯更是个美女
     obj.start.apply(newobj, ['张雨芯', '美女']); //xx.apply(新指向,后面跟的是数组)
     obj.start.bind(newobj, '张雨芯', '美女')(); //xx.apply(新指向,后面可以直接加参数)()   再加一个自执行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,801评论 1 32
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,128评论 0 5
  • 1.概念 在JavaScript中,this 是指当前函数中正在执行的上下文环境,因为这门语言拥有四种不同的函数调...
    BluesCurry阅读 4,863评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,459评论 0 4
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,635评论 0 21