8.原型

在JavaScript中,函数是一种值。而原型(prototype)是函数的一个属性,这个属性的值是一个对象,下面看一个构造函数:

function Gadget(name,color){
    this.name=name;
    this.color=color;
    this.whatAreYou=function(){
        terutn 'I am a  '+this.color+' '+this.name; 
    }
}

prototype和name、color、whatAreYou都属于Gadeget的属性。下面来给上面的构造函数的原型属性赋值,两种方法结果一样:

Gadget.prototype.price = 100;
Gadget.prototype.rating = 3;
Gadget.prototype.getInfo = function(){
   return 'Rating: '+this.rating+',price: '+this.price;
}

//等价于

Gadget.prototype={
    price:100,
    rating:3,
    getInfo:function(){
       return 'Rating: '+this.rating+',price: '+this.price;
    }
}

当我们使用构造器Gadeget()来新建一个newtoy对象,并访问rating属性的时候。JavaScript先会查询newtoy对象的所有属性,但却找不到rating的属性。接下来,脚本引擎会去查询用于创建当前对象的构造器函数的原型,等价于我们直接访问newtoy.constructor.prototype。如果在原型中找到了该属性,就立即使用该属性。

var newtoy = new Gadeget('webcam','black');

newtoy.name    //webcam

newtoy.rating    //3

因为构造函数的原型属性值本身是一个对象,那么意味着它也有一个构造器方法,而这个构造器方法又会有自己的原型,这样就形成了原型链。

 

posted on 2015-01-28 11:14  凡一二三  阅读(467)  评论(0编辑  收藏  举报