构造函数:只要函数被new就可以认为是构造函数(一般情况下构造函数有this)
###来看一个小例子:<br>
function Person(){
var age = 20;
this.username = 'zhangsan';
this.say = function(){
console.log('今天是12月1号,又是一个新的开始!');
}
}
console.dir(Person);
**//原型对象**:Person.prototype(没有理由原型对象就是这么写,牢记)
Person.prototype.school = '清华园';
Person.prototype.study = function(){
console.pedir(Person.prototy);
}
**//实例对象**:具有构造函数和原型对象中所有的属性和方法
var p = new Person();
console.dir(p);
//p对象有构造函数内的username属性和say方法
//同时还具有原型对象中的school属性和study方法
console.log(p.username,p.school);
p.say();
p.study();
构造函数 Person
- Person.prototype : 获取原型对象
- username
- say()
原型对象 Person.prototype
- constructor : 获取对应的构造函数
- school
- study()
- _ proto_(双下划线)
特别强调:
1.原型对象中都有constructor和__proto__属性
实例对象
- username->构造函数 Person
- say()->构造函数 Person
- scholl->原型对象 Person.prototype
- study->原型对象 Person.prototype
- constructor->原型对象 Person.prototype
- proto->原型对象 Person.prototype
1.实例对象将构造函数和原型对象中所有的属性和方法都可以获取到 2.p.__proto__.school和p.school一样(简写) 3.原型对象中的方法和属性都是所有对象共享的,构造函数中的方法和属性都是不共享的 4.所有的对象都可以获取到Object的原型对象的属性和方法
p.constructor == Person
p.proto == Person.prototype