1、什么是面向对象编程?
面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。它使用先前建立的范例,包括模块化,多态和封装几种技术。许多流行的编程语言(如Java,JavaScript,C#,C+ +,Python,PHP,Ruby,Go和Objective-C)都支持面向对象编程(OOP)。
2、面向对象编程的中的对象指的是什么?
每一个具有属性和方法的事物都是一个对象,所以在js中万物皆对象。
3、什么是构造函数?
所谓”构造函数”,就是专门用来生成实例对象的函数。为了和普通函数区分,通常首字母大写。由于js中没有类这个概念(ES6中才引入了class),而是由构造函数来定义对象的模板(也就是类),类是具有相同属性和方法的对象的总称。
4、构造函数有什么特点?
- 构造函数中的this指向当前实例。
- 生成对象的时候,必须使用new命令。
5、如果忘了使用new命令,直接调用构造函数会发生什么事?
会当做普通对象调用,this指向window
避免这样错误的方法有两种:
- 使用严格模式
use strict
,严格模式下不使用new来执行构造函数时会报错 - 构造函数内部判断是否使用new命令,如果发现没有使用,则直接返回一个实例对象。
6、new的原理是什么?
- 创建一个空对象,作为将要返回的对象实例。
- 将这个空对象的原型,指向构造函数的prototype属性。
- 将这个空对象赋值给函数内部的this关键字。
- 开始执行构造函数内部的代码。
7、创建实例对象的方法有哪些?
- 用new执行构造函数
- Object.create()
8、this指的是什么?
this关键字指的就是属性或方法“当前”所在的对象
9、this设计的目的是什么?
由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境(context)。所以,this就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境。
10、如何判断this的指向?
- 普通函数中this,谁调用的函数this指向谁
- 构造函数中this指向当前实例
- DOM 事件中的this指向绑定该函数的当前DOM对象
- 默认(非严格模式)情况下,this指向window, 严格模式下,this指向undefined。
11、改变this指向的三种方式
call()
apply()
bind()
12、js中的继承
js的继承通过构造函数和原型(prototype)来实现
13、prototype 属性的作用
每个函数都有一个prototype属性,指向一个对象。原型对象的所有属性和方法,都能被实例对象共享。
14、原型链
对象到原型,再到原型的原型。。这样就形成了原型链,直至找到Object. prototype,而Object. prototype的原型是null
15、constructor属性
prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数。