原型:
定义:原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该结构函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
prototype–>原型,系统自带的,在函数定义前就已经定义好了。
一,函数对象
所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型) 所有函数拥有prototype属性(显式原型)(仅限函数) 原型对象:拥有prototype属性的对象,在定义函数时就被创建
举个例子:
function Person(){
}
var person = new Person();
在上面我们创建了一个构造函数,这个函数在定义前就有了一个原型:Person.prototype,原型是一个对象,其他对象可以通过它实现属性继承。
举个例子:
Person.prototype.name = 'HE';
function Person(){
}
var person = new Person();
在控制台上查阅person.name---->‘HE’
因为在构造函数中,没有name这个属性,所以它就会去继承它的原型的name,
如果构造函数有name这个属性,那么它就会输出自己的name。
Person.prototype.name = 'HE';
function Person(){
this.name = 'Liu';
}
var person = new Person();
在控制台上查阅person.name---->‘Liu’
如果原型上有name的属性值,可是函数内部也有name的属性值,取的是函数内部的属性值。
利用原型的特点和概念,可以提取共有属性
举个例子:
function Car(color,owner){
this.owner = owner;
this.color = color;
this.height = 1400;
this..lang = 4900;
this.carName = "BMW";
}
var car = new Car('red','Jeslie He');
var car1 = new Car('blue','student He');
构造一个Car函数,然后在自己的函数体内有五个属性,在下面我们定义两个执行函数,分别是car和car1,执行的时候,都会分别去执行以下属性,除了颜色和owner是不同的,其余三个属性都是一样的,那么我们就可以用原型来提取公有属性。
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','Jeslie He');
var car1 = new Car('blue','student He');
这样就可以优化代码,和提高运行效率。
原型也有增删改查,与对象的差不多一样。
Person.prototype.LastName = 'Deng';
function Person(name){
this.name = name;
}
var person = new Person('Jeslie He');
Person.prototype.LastName = ‘James’;---->改
Person.prototype.form = ‘China’;–>增
person.LastName -->查
删:在要删的元素前面加delete;