function Fn() {
this.name = "张三";
this.age = 18;
console.log('this:', this);
}
var b = new Fn();
这里打印的this是: this: Fn {name: '张三', age: 18}
我最近看了很多this指向问题,也了解了一下new的过程,new的过程是1.创建空对象 2.将空对象的原型指向构造函数的原型3.改变this指向新的空对象并执行一次上下文 4.返回这个对象
但是我始终没绕过的弯是,这里打印的this为什么是构造函数本身而不是实例b,那上面说的第3点将this指向新的实例是发生在什么时候的?
this是指当前类的意思。
你好,说一下我的理解:
“console.log('this:', this)”这一句输出的this是“var b = new Fn()”创建的对象b,并不是当前类(楼上回答有误,请注意)。
如果你再加一个“var c = new Fn()”那么“console.log('this:', this)”这一句输出的this是创建的对象c,也就是这个this始终代表你创建的当前对象实体,而不是类;
你如果将“console.log('this:', this)”这一句换成“console.log('this:', JSON.stringify(this))”或许理解更加深刻一些。
你对this的理解有一个误区,我对this说明如下:
JavaScript this 关键词指的是它所属的对象。
它拥有不同的值,具体取决于它的使用位置:
在方法中,this 指的是所有者对象。
单独的情况下,this 指的是全局对象。
在函数中,this 指的是全局对象。
在函数中,严格模式下,this 是 undefined。
在事件中,this 指的是接收事件的元素。
像 call() 和 apply() 这样的方法可以将 this 引用到任何对象。
函数中的 this(默认)
在 JavaScript 函数中,函数的拥有者默认绑定 this。
因此,在函数中,this 指的是全局对象 [object Window]。
取决于你定义的这个Fn函数是属于谁
如有帮助,请采纳,十分感谢!
1.函数三种执行方式 :
全局函数 : this指向window
对象方法: this指向对象
构造函数 : this指向new创建的对象
共同的特点: this的指向无法动态修改
2.函数上下文模式 :
2.1 作用: 可以动态修改函数中的this
2.2 语法: 有3种写法,作用都是一样改this,应用场景不同
a. 函数名.call(修改的this,arg1,arg2…………)
* 适用于函数原本形参 <= 1
b. 函数名.apply(修改的this,[数组或伪数组])
* 适用于函数原本形参 >= 2
c. 函数名.bind(修改的this,arg1,arg2…………)
* 特点:不会立即执行这个函数,而是返回修改this后的新函数
* 适用于不会立即执行的函数 : 事件处理函数,定时器函数