本文在个人主页同步更新~
背就完事了
面试官:什么是构造函数介绍:一些知识点相关的面试题和答案
使用姿势:看答案前先尝试回答,看完后把答案收起来检验成果~
答:构造函数的本质是一个普通函数,他的特点是需要通过new
关键字来调用,用来创建对象的实例。所有的引用类型,如[],{},function等都是由构造函数实例化而来。一般首字母大写。
解析:首字母大写只是约定俗成的规范。首字母小写的函数也可以用作构造函数。
面试官:什么是原型和原型链答:原型模式是JS实现继承的一种方式。所有的函数都有一个prototype
属性,通过new
生成一个对象时,prototype
会被实例化为对象的属性。所有的引用类型都有一个__proto__
指向其构造函数的prototype
。原型链的话,指的就是当访问一个引用类型时,如果本身没有这个属性或方法,就会通过__proto__
属性在父级的原型中找,一级一级往上,直到最顶层为止。
解析:原型链最顶层Object的prototype
的__proto__
指向为null。
constructor
属性
答:所有函数的原型对象都有一个constructor
属性指向函数本身。
解析:实例化的对象可以通过[].__proto__.constructor
获取到其构造函数。
答:
- 创建一个空对象。
- 将这个空对象的
__proto__
指向构造函数的prototype
。 - 将构造函数的
this
指向这个对象。 - 执行构造函数中的代码。
答: 使用instanceof
关键字 或者constructor
属性。
解析:instanceof
的原理是判断操作符左边对象的原型链上是否有右边构造函数的prototype
属性。
理解小帮手
介绍:总结性的图表,代码例子或笔试题目和解析,让知识点更容易懂
关于构造函数和原型
构造函数:相当于java中“类”的存在,如原生JS中的Array, Function, String, Date
等等,都是构造函数。例如new Date()
通过new操作符进行调用,用来创建一个Date对象的实例。
一个便于理解的栗子,描述js通过原型模式实现继承的过程
function Animal (name) {
// 构造函数
this.name = name
}
Animal.prototype.type = 'animal' // 原型上的属性和方法可以被继承
Animal.prototype.eat = function () {
console.log('eat')
}
let dog = new