1,什么是原型对象?
每一个构造函数都有一个prototype的属性,这个属性的值是一个对象,这个对象就叫构造函数的原型对象。一般建议将构造函数的成员属性绑定在原型对象prototype上,因为原型对象prototype身上的属性默认可以通过实例对象访问到。
2,什么是原型链?
每个构造函数都有一个prototype属性,即原型对象,通过实例对象的proto属性也可访问原型对象;而原型对象本质也是一个对象,是对象就有自己的原型对象,最终形成的链状结构成为原型链。
3,什么是构造函数?
构造函数本质也是一个函数,只不过这个函数定义的时候首字母需要大写,构造函数调用时,必须通过一个new关键词调用。
4,js中实现继承的方式?
ES6之前常见的继承方式是原型继承,借用构造函数继承,组合继承。
ES6之后使用extends关键词实现继承( class Student extends Person{} )
5,什么是闭包,有什么作用,使用时需要注意什么?
闭包是一个函数相关的概念,表现形式是一个父函数内部嵌套了一个子函数,子函数直接或者间接的被返回给外部作用域,并且子函数中会使用到父函数局部作用域中的变量,当我们在外部调用这个子函数的时候,就会发生闭包现象。
闭包的作用:闭包可以延展一个函数的作用域
注意事项:不能滥用闭包,会导致内存泄漏
6,什么是内存泄漏,哪些操作会导致内存泄漏?
内存泄漏是指本应该被垃圾回收机制回收的内存空间由于某种特殊原因没有及时被回收,称之为内存泄漏。滥用全局变量和滥用闭包都会导致内存泄漏。
7,什么是预解析?
JS代码在执行之前,解析引擎会对代码进行一个预先的检查,主要会对变量和函数的声明进行提升,将变量和函数的声明提到代码的最前面。变量只提升声明,不提升赋值。
8,说说你对this关键词的理解?
this在不同的场景下指向不同,主要分为以下几种情况:
普通函数中指向全局window;
对象的成员方法中指向该方法的宿主对象;
构造函数中指向new出来的实例对象;
事件处理函数中指向事件源;
回调函数中指向全局window;
9,call,apply,bind的区别?
这三个方法都是函数这个特殊对象的方法,通过这三个方法都可以改变函数内部this的指向。
不同点:call和apply会调用一次函数,而bind不会调用函数,只会在内存中创建一个函数的副本(修改过this指向的函数)
call从第二个参数开始需要一个参数列表,
apply第二个参数需要是一个数组
10,new操作符具体干了什么?
第一步创建一个空对象;
第二步将this指向空对象;
第三步动态给刚创建的对象添加成员属性;
第四步隐式返回this。