javascript的prototype
2008-09-26 15:23 wlstyle 阅读(240) 评论(0) 收藏 举报在这里输出的color为black,表明这里的color是构造函数的中的属性color(this.color)。而不是原型(prototype)中的属性(color)。再看下面的代码:
1 function Car(sColor){
2 this.color= sColor;
3 }
4 Car.prototype.color='red';
5 var oneCar=new Car();
6 alert(oneCar.color);//output undefined
2 this.color= sColor;
3 }
4 Car.prototype.color='red';
5 var oneCar=new Car();
6 alert(oneCar.color);//output undefined
这里输出的是undefined,表明这里color依然指向构造函数中的属性(this.color,因为sColor未定义,所以为undefined)。而不是原型(prototype)中的属性(color)。如果我们把Car原型中的属性color名称改为colors呢。
1 function Car(sColor){
2 this.color= sColor;
3 }
4 Car.prototype.colors='red';
5 var oneCar=new Car('black');
6 alert(oneCar.colors);//output red
2 this.color= sColor;
3 }
4 Car.prototype.colors='red';
5 var oneCar=new Car('black');
6 alert(oneCar.colors);//output red
这里输出的red,对照第一段代码他可以表明当调用colors属性时候javascript解释器首先在构造函数中寻找如果找到则不继续寻找。如果没有找到则在继续在原型(prototype)中寻找。继续看下面代码。
1 function Car(sColor){
2 this.color= sColor;
3 }
4 Car.prototype.colors='red';
5 function fordCar(sColor,iWeight){
6 Car.call(this,sColor);
7 this.weight=iWeight;
8 }
9 fordCar.prototype= new Car();
10 fordCar.prototype.constructor= fordCar;
11 var fordcar1=new Car('black',30);
12 alert('colors is :'+fordcar1.colors);//output red
13 alert('kaka is :'+ fordcar1.kaka);//output undefined
2 this.color= sColor;
3 }
4 Car.prototype.colors='red';
5 function fordCar(sColor,iWeight){
6 Car.call(this,sColor);
7 this.weight=iWeight;
8 }
9 fordCar.prototype= new Car();
10 fordCar.prototype.constructor= fordCar;
11 var fordcar1=new Car('black',30);
12 alert('colors is :'+fordcar1.colors);//output red
13 alert('kaka is :'+ fordcar1.kaka);//output undefined
这里输出的是red,fordCar里并没有定义colors属性。这里依然有输出。这主要是javascipt解释器在当前的对象没有查找到colors这个属性,就会去查找他的原型(prototype)。这里fordCar1的原型是Car的实例,他存在这个属性colors。所以会有输出。这里就是一个原型链。而属性kaka却没有输出。得到的是undefined。这里是因为在原型链中没有找到这个属性。
浙公网安备 33010602011771号