定义
function对象的一个属性,它定义了构造函数制造出来的对象的公共祖先(继承)。
通过该函数制造出来的对象都可以继承该原型的属性和方法。原型也是对象。
Person.prototype = { } --> 原型
Person.prototype.name = {
name : "原型属性"
}
function Person(){
this.name = "自身属性";
}
var person = new Person();
构造函数构造多个对象时,对象的公有属性可以提取到原型上。
Car.prototype = {
carname : "BMW"
}
function Car(color, owner){
this.owner = owner;
this.color = color;
}
var car = new Car("red","MrDeng");
var car1 = new Car("black","MrLee");
原型的增删改查
Athlete.prototype.name = "james";
function Athlete(){
}
var athlete = new Athlete();
var athlete1 = new Athlete();
查:Athlete.prototype.name
删: delete Athlete.prototype.name(删除一个不存在的属性,返回true)
增: Athlete.prototype.sex = “male”;
改:Athlete.prototype.name = “Lerborn”;
(athlete.name = “Lerbron”;//该对象自己生成一个name属性,没有权利改型)
constructor
1、原型上的一个属性:构造器,对象可通过它找构造它的函数。
function Car(){ }
var car = new Car();
car.constructor --> function Car(){}
2、constructor属性可以修改
function Person(){}
Car.prototype.constructor = Person;
car.constructor --> function Person(){}
_proto_
1、存对象原型,起到连接对象和原型的作用
Person.prototype.name = "GT";
function Person(){
var this = {
__proto__:Person.prototype
}//隐式
}
var person = new Person();
2、访问对象属性的过程:
person.name --> this.name --> _proto_:Person.prototype.name -->(更高一级的原型)
3、可以修改对象的__proto__属性,即改变指向的原型,但也会因此丢失原本原型内的constructor属性。
Person.prototype.name = "GT";
function Person(){}
var person = new Person();
var Replace = {
name : "lgt"
}
person.__proto__ = Replace;
4、堆数据摆放原则
例1.
Person.prototype.name = "gt";
function Person(){ }
var person = new Person();
Person.prototype = {
name : "LGT"
}
person.name --> "gt"
数据摆放过程:
Person.prototype = {name:"gt"};
person.__proto__ = Person.prototype;//已经创建对象了,__proto__已经指向房间
Person.prototype = {name :"LGT"};//创建新的对象原型 跟之前指向的房间无关。
例2.
Person.prototype.name = "gt";
function Person(){
//var this = {__proto__:Person.prototype}
}//预编译把函数提升了
Person.prototype = {
name : "LGT"
}//对象还没创建,所以房间还未固定,原型被覆盖。
var person = new Person();
person.name --> "LGT"