持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情
文章概览
- this关键字
- 构造函数
- instanceof
this关键字
当解析器调用函数时,每次都会向函数内部传递一个看不见的参数,这个参数就是this,this指向一个被我们称为函数执行上下文的对象,函数调用方式的不同,使this所指向的对象也有所不同。
- 当以函数的方式调用时,this指向的是window
- 当以方法的方式调用时,this指向的是调用方法的对象。
构造函数
- 构造函数和普通的函数一样,创建方式和普通函数相同,不同的是构造函数习惯上首字母大写。
- 构造函数和普通函数的另一个区别就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。
- 构造函数的执行流程如下:
- 创建一个新的对象
- 将新对象设置为函数中this
- 逐行执行函数中的代码
- 将新建的对象作为返回值返回
instanceof
instanceof可以用来查看一个对象是否是一个类的实例
语法:
对象 instanceof 构造函数
如果是,那么返回true,否则返回false
所有的对象都属于Object的后代,所以任何对象和Object进行instanceof检查时都是true。
使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类。我们将通过一个构造函数创建的对象,称为是该类的实例。 **
this的情况
- 如果使用函数调用,this是window
- 如果使用方法的形式调用,谁调用方式,谁就是this
- 当以构造函数的形式调用时,this就是新创建的那个对象
Object test = "Hello"; // test实际类型是String,但是Object是所有类的父类
System.out.println(test instanceof Object); // 返回true ,因为test编译时时Object类,test可以是Object类实例
System.out.println(test instanceof String); // 返回true ,因为Object是String的父类,test可以是String类的实例
System.out.println(test instanceof Math); // 返回false ,因为Object是Math的父类,但是test不是Math类的实例
// 不符合instanceof语法规则:
String test02 = "Hello"; // test02是String类
System.out.println(test02 instanceof Math); // 编译出错,String类和Math类无继承关系