this是什么
this是javascript的一个关键字
this是一个在函数体内部自动生成的一个对象,且只能在函数体内部使用
this的使用方法
this经常被大家伙叫成this指针,而也就是这个称呼,体现出了它的作用,指向什么东西,指向某一项数据
this指针的指向一直遵循一个原则:
this永远指向的是最后调用它的对象
说完this的指向,后面就是它所带的值,this的值并不是一个固定的值,它有着不同的值
接下来,我们就可以来看一下this的用法
- 第一类 ——纯粹的函数调用
let x=13;
// 有this出现的函数不要用箭头函数
// 声明函数
function abb()
{
this.x=18,
console.log(this.x)
}
// 执行函数
abb();
在这里的this,它的作用是全局调用,因此它指向的就是全局对象x
- 第二类——作为对象函数调用
函数并不都是独立的,它也可以寻找一个对象当自己的保护壳
当函数作为某个对象的方法来调用时
这时的this就指向它的上级对象
function text ()
{
this.name="bu520zhoujielun"
console.log(this.name)
}
let y=
{
name:"520zhoujielun",
you:text
}
// 因为函数还没有执行,因此我们要先将函数执行
y.you();
// 输出结果为:bu520zhoujielun
在对象内部,方法调用也有着其他情况
-
this没有被上级对象调用时,则this指向时windown
-
当一个函数被多个对象所包括时,即使这个函数是被最外层的对象服务,但this依然指向上一级对象
let text =
{
nao:function()
{
console.log(this.a)
}
}
let z=
{
a:"520zhoujielun",
you:text
}
z.text.nao();
// 输出结果为undefind
在这串代码中,虽然函数text中没有this指针要的a,但它依然会以函数text为自己的指向,并不会因为上上级对象有个a,就屁巅屁颠跑了
- 第三类——构造函数使用
所谓构造函数,便是可以通过这个函数创造一个新的函数
let a=3;
function text ()
{
this.a=13
console.log(this.a)
}
var b =new text();
console.log(b);
new关键字就像是一个复制粘贴,将原函数中的内容全部复制过来
同时也可以改变this指针的指向,使他指向新的函数
this指针的方向如何改变
上面虽然说着this指针,不会轻易更换自己的对象,但还是有可以让它低头的方法的
那我们除了new关键字,还可以依靠其他关键字来改变this指针的方向
三兄贵:
- bind 只改变方向,但并不执行
- call 改变方向的同时执行
- apply 改变方向的同时执行
三个用法格式都是一样的,我就拿call来举例吧
var text =function()
{
this.a=13
console.log(this.a)
}
// 老对象
let z=
{
a:"520zhoujielun",
you:text
}
// 新对象
let nihao=
{
c:13,
d:15
}
text.call(nihao,"c");
z.text();
// 输出结果为13
基本格式:
call(新的对象,对象里的属性)