javascript进阶-原型prototype

1、javascript原型认识javascript

不少编程语言都有类的概念,咱们能够拿原型和类进行比较,看看它们之间的区别以及相同点在哪里。java

一、类:类是一个具体事物的抽象因此类是一个抽象的东西,在面向对象中类能够用来构造对象,这就是一个抽象—具体的过程。在现实生活中就比如:图纸造汽车。编程

二、原型:javascript中用原型来构造对象是一个具体—具体的过程。在现实生活中就比如某品牌汽车—其余牌子汽车。app

 

2、设置对象的原型编程语言

一、Object.create(proto[,propertiesObject])函数

proto一个对象,做为新建立对象的原型。this

实例:spa

复制代码
//新建一个原型对象car    
var car = {
            name:'car',
            start: function(){
                console.log(this.logo);
            }
        }
//使用原型对象建立新的对象
var Bensz = Object.create(car);
Bensz.logo = 'bensz';
//用新的对象Bensz调用start方法
Bensz.start();
复制代码

上述代码运行结果是打印出了‘bensz’。prototype

二、构造函数code

构造函数能够用prototype属性设置原型,使用new建立对象。

实例:

复制代码
//首先构造函数car
function Car(logo){
    this.logo = logo || 'unkown name';
}
//设置car的prototype属性,这个属性是一个对象
Car.prototype = {
    strat: function(){
        console.log(this.logo);
    }
}

var bensz = new Car('bensz');
bensz.strat(); 
复制代码

上述代码也能打印中'bensz'

图解过程:

 

在用new关键字建立新的对象bensz时实际上是有三个步骤。一、建立新对象bensz 二、设置bensz的_proto_ ,这是_proto_属性是指向car.prototype,三、Car.apply(bensz,[]),bensz执行Car上的logo赋值操做,这时bensz对象有了logo属性。

 

3、原型链

实例:

复制代码
//首先构造函数car
function Car(logo){
    this.logo = logo || 'unkown name';
}
//设置car的prototype属性,这个属性是一个对象
Car.prototype = {
    strat: function(){
        console.log(this.logo);
    }
}
//建立一个构造函数bensz
function Bensz(serialno){
    this.serialno = serialno;
}
//设置bensz的prototype属性 为了一个car类型的对象
Bensz.prototype = new Car('bensz');

var bensz1 = new Bensz(12345);

//定义了两个构造函数,第二个构造函数的原型不是一个普通的Object,而是Car类型的对象。
复制代码

过程:一、建立一个Car构造函数,且设置它的prototype属性。二、建立一个Bensz构造函数,它的prototype属性是Car类型的对象,这个时候因为是new关键字建立的对象,这个对象就具备了_proto_属性,这个属性就指向Car.prototype。三、建立一个bensz1对象,也是因为是new关键字建立,它也有一个_proto_属性,这个属性就指向构造函数Bensz的prototype属性,即Bensz.prototype。

除此以外,咱们能够发现Car.prototype能够利用new Object建立,由于它自己就是一个对象,因此它也具备_proto_属性,且指向的是Object.prototype。

因此整条原型链是:一、bensz1._proto_ —— 二、Bensz.prototype(new Car('bensz')) , Bensz.prototype._proto_—— 三、Car.prototype,Car.prototype._proto_——四、Object.prototype。

 

访问属性:先在自己的对象上找,若是没有沿着原型链往上找

修改与删除属性:只能修改和删除对象自身的属性

相关文章
相关标签/搜索