[路飞]每日一答: 简述关于instance 和 instanceof?

508 阅读2分钟

关于 instance 你了解多少?

一.什么是 instance ?

在js里instance一般指构造函数通过new关键字得到的实例对象,简单地说即:

new操作实例在JavaScript类:instance = new Class()

二. instance 的特性

instance 的本质是一个对象,与其构造函数在同一个原型链上,也就是说 instance 可以使用原型链上的所有属性和方法。根据JS原型和原型链的特点,在实例对象中使用变量或方法时,优先使用实例对象中的, 如果实例对象中不存在,则沿着原型链向上寻找,最终找不到时返回 undefined。

三 关于 instanceOf

1.语法

[对象] instanceof [构造函数]
var obj = new Object()
obj instanceof Object // true

2.作用

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

const a = new String('abc')
console.log(a instanceof String) // true

注意:

const a = 'a
console.log(a instanceof String) // false

a 是一个字符串类型,但是 a instanceof String 返回的是false,原因是 a 是字符串数据类型的值,而不是String 通过 new 返回的 instance 对象。

3.instanceof 和 typeof 的区别

要比较他们的区别,先看下以下代码:

const Person = function () {
  name: 'ouda'
}

const p = new Person()
console.log(p instanceof Person) // true
console.log(typeof p) // object

首先 instance 是判断是否存在在原型链上,所以返回的是 true 或 false, typeof 是返回某一个类型。所以typeof 和 instanceof 都是用来判断类型的函数,但他们的返回是不一样的。

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'

通过以上代码我们可以发现,对于一些基本数据类型来说他是可以返回具体的数据类型的,但是再继续看

typeof [] //'object'
typeof {} // 'object'
typeof null // 'object'

对于引用数据类型来说,他返回的都是 object

所以要想知道该实例具体是哪一个引用类型那么就可以使用 instanceof 来判断他是否存在与该原型链上即可。