构造函数是什么?
答:用于生成对象的函数。对象不是直接声明即可吗?为什么还要用构造函数生成对象,如
var obj = {}
,生成一个空对象。
答:这是简写,var obj = {}
等价var obj = new Object()
,本质上也是用构造函数生成的。那对象是什么?
答:对象就是客观(真实世界)存在的人、事、物体等实体在计算机逻辑(虚拟世界)中的映射。对象有什么用?
答:封装属性(property)和方法(method)。-
构造函数生成的对象与普通声明的对象有什么不同?
答:本质上没有,都是对象。根据需求生成构造函数模板,该模板具有属性与方法,再通过该模板生成对象,所以这些对象具有 共同 的属性与方法,而普通生成的对象,也可自由封装属性与方法,若与构造函数生成相比,可简单理解为批量制造与单体制造。呃,还有一点较为关键的是 :
构造函数生成的对象的__proto__
指向构造函数的prototype
,而普通声明的对象的__proto__
指向 Object 的prototype
构造函数和普通函数有区别吗?
答:本质上没有,都是函数,但作为区分,构造函数名字的第一个字母通常大写,其次是构造函数的使用有以下特点:
1.函数体内部使用了this
关键字,代表了所要生成的对象实例。
2.生成对象的时候,必须使用new
命令。
function Pokemon(name){ // var Pokemon = function (name) { }
this.name = name
}
var pikachu = new Pokemon('pikachu')
- 为什么一定要使用
new
,new
的作用是什么?
答: 1.创建一个空对象,作为将要返回的对象实例。
2.将这个空对象的原型,指向构造函数的prototype属性。
3.将这个空对象赋值给函数内部的this关键字。
4.开始执行构造函数内部的代码。
- 不添加
new
会怎样?
答:不添加new
,在使用该函数时,无法将this
指向一个空对象,此时this
便指向window
,函数内部构造的对象属性变量就成为全局变量,构造函数失败。没有new
与this
就不是构造函数