疑问一:构造函数和普通函数有什么区别?
- 为了从视觉上加以区分,书写方式 不一样。
function Person(){
}//构造函数,大驼峰式命名
function person(){
}//普通函数
- 调用方式不一样,构造函必须使用new操作符。
var person = new Person();
你看不到的背后,new操作符做了什么?
- 创建一个新对象;
- 改变this指向;
- 执行构造函数中的代码,即为这个新对象添加属性、方法;
- 返回一个对象;
疑问二:构造函数、实例和原型的关系
- 每个构造函数都有一个原型对象。
var person = new Person(); console.log(Person.prototype);//构造函数有一个属性叫做prototype,它是一个对象
- 原型对象都包含一个指向构造函数的指针。
console.log(Person.prototype.constructor);//每个构造函数的prototype属性都是个对象,这个对象都有一个属性constructor并且指向构造函数本身。
- 实例都包含一个指向原型对象的内部指针。
console.log(person.__proto__ == Person.prototype);//返回true。实例都有一个属性叫做_proto_,指向原型对象