未分类

原型那点事儿(1)

定义:

原型是function对象的一个属性,它定义了构造函数制造出来的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
obj.prototype –原型

利用原型特点和概念,可以提取共有属性

eg:

1
2
3
4
5
6
7
8
9
Car.prototype.height = 1400;//统一属性放在原型中
Car.prototype.lang = 4900;
Car.prototype.carName = "BMW";
function Car(color,owner){
this.owner = owner;
this.color = color;
}
var car = new Car('red','LBW');
var car1 = new Car('green','xxx');

原型的增、删、改、查

1.修改属性:obj.prototype.属性名 = “xxx”;
2.查找属性:obj.prototype.属性名;
3.增加属性:obj.prototype.新属性名 = “xxx”;
4.删除属性:通过delete(不能通过对象操作原型)

查看对象的构造函数 constructor

constructor属性是系统给每个对象自带的属性,记录了这个对象的构造函数,可以手动修改

隐式属性__proto__

我们之前说,一个对象创建出来,会默认创建一个空对象,但实际上,里边是有系统自带的属性的,当我们找一个对象上的属性不是该对象自身就有的时候,会通过__proto__找到该原型。也可手动修改。

1
2
3
var this = {
__proto__:Object.prototype
}

eg1:

1
2
3
4
5
6
7
Person.prototype.name = 'sunny';
function Person(){

}
var person = new Person();
Person.prototype.name='cherry'
console.log(person.name)//结果为cherry,不为sunny,直接操作了属性

eg2:

1
2
3
4
5
6
7
8
9
Person.prototype.name = 'sunny';
function person(){

}
var person = new Person();
Person.prototype = {
name:'cherry'
}
console.log(person.name)//结果为sunny,不为cherry,已经创建对象之后又修改原型

eg3:

1
2
3
4
5
6
7
8
9
Person.prototype.name = 'sunny';
function person(){

}
Person.prototype = {
name:'cherry'
}
var person = new Person();
console.log(person.name)//结果为cherry,更改原型之后才创建对象