Open lianjianbo opened 5 years ago
javascript
this
基本含义:this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。也就是所谓的this所代表的对象要看实际运行时候的上下文环境。下面有几个实例。
eg1:
var a=function(){ return this; }
此时,a是一个全局的函数表达式,外面没有对象,所以其值默认就是最外面的window对象。页面里面所有的对象和内容都是window对象的子孙,所以上面的this指向值其实是window。 从这个,可以总结: 如果外部没有对象定义,this指向默认的window对象。
a
window
eg2:
var person={ name:"张三", sayThis:function(){ return this; } }
这次把相同的函数声明,放到一个对象里面,从测试结果可以看出,this此时已经不指向外侧的window了,已经指向定义其的外部对象了。这里就是person 从这个,可以总结: 如果外部有对象定义,this指向其外部的对象。
person
eg3:
var person={ name:"123", returnThis:function(){ return this; } } var man={ name:"456", getNowThis:this, sayThis1:person.returnThis(), sayThis2:person.returnThis }
从这个,可以总结: this值指向的对象确实如大家所说,看实际运行时候的环境变量。this值相应的也会有所改变。
eg4:
var arr=[ function(){ return this; } , 2, 3, 4 ]
由上面的例子可以看出,数组的this值也指向该this,因此得出下面的结论:
数组也有`this`,因为数组本来就是`object`对象的一种。遵从于`this`指向对象的结论。
eg5:
function Person(){ this.age=25; this.title="title"; this.sayThis=function(){ return this; } } var person1=new Person(); Person.age // undefined person1.age // 25 person1.sayThis() .title // "title" person1.sayThis()==Person // fasle person1.sayThis()==person1 // true
在构造函数里面也会存在this 这里首先发现,函数里面的this并没有指向函数本身,也没有指向外面的window对象等。要理解这个this被赋值的过程,关键是注意那个new操作字符串。 这种Person()其实是一种构造函数定义对象的方法。经历了四个步骤 (1)创建一个新对象 (2)将构造函数的作用域赋给新对象。(因此this就指向了这个新对象); (3)执行构造函数里面的代码(为这个新对象添加属性) (4)返回新对象。 因此得出结论: 构造函数的this指向并不是构造函数本身,而是指向相应的实例对象,再次证明了this指向对象 拓展: 对于需要用到局部变量的this的时候,需要把函数(function)去掉,用()=>{}再去调用this或者也可以是这样(function (){}).bind(this)
Person()
(function)
()=>{}
(function (){}).bind(this)
总结: 1、this指向的一定是一个对象。 2、在外面没有对象时候,this指向默认的window对象 3、外部有对象时候,this指向该对象 4、对象调用其他对象的this,要看具体的this运行环境来决定this指向的是哪个对象。 5、数组里面的this对象也会指向数组本身,数组也是对象的一种。 6、构造函数里面的this对象,指向是实例对象本身,而不是构造函数。
javascript
中this
的用法:基本含义:
this
对象 返回“当前”对象。在不同的地方,this
代表不同的对象。也就是所谓的this
所代表的对象要看实际运行时候的上下文环境。下面有几个实例。eg1:
此时,
a
是一个全局的函数表达式,外面没有对象,所以其值默认就是最外面的window
对象。页面里面所有的对象和内容都是window
对象的子孙,所以上面的this
指向值其实是window
。从这个,可以总结: 如果外部没有对象定义,this指向默认的
window
对象。eg2:
这次把相同的函数声明,放到一个对象里面,从测试结果可以看出,
this
此时已经不指向外侧的window
了,已经指向定义其的外部对象了。这里就是person
从这个,可以总结: 如果外部有对象定义,this
指向其外部的对象。eg3:
从这个,可以总结:
this
值指向的对象确实如大家所说,看实际运行时候的环境变量。this
值相应的也会有所改变。eg4:
由上面的例子可以看出,数组的this值也指向该
this
,因此得出下面的结论:eg5:
在构造函数里面也会存在
this
这里首先发现,函数里面的this并没有指向函数本身,也没有指向外面的window
对象等。要理解这个this
被赋值的过程,关键是注意那个new操作字符串。 这种Person()
其实是一种构造函数定义对象的方法。经历了四个步骤 (1)创建一个新对象 (2)将构造函数的作用域赋给新对象。(因此this就指向了这个新对象); (3)执行构造函数里面的代码(为这个新对象添加属性) (4)返回新对象。 因此得出结论: 构造函数的this
指向并不是构造函数本身,而是指向相应的实例对象,再次证明了this
指向对象 拓展: 对于需要用到局部变量的this
的时候,需要把函数(function)
去掉,用()=>{}
再去调用this
或者也可以是这样(function (){}).bind(this)
总结: 1、
this
指向的一定是一个对象。 2、在外面没有对象时候,this
指向默认的window
对象 3、外部有对象时候,this指向该对象 4、对象调用其他对象的this
,要看具体的this
运行环境来决定this
指向的是哪个对象。 5、数组里面的this
对象也会指向数组本身,数组也是对象的一种。 6、构造函数里面的this
对象,指向是实例对象本身,而不是构造函数。