JavaScript继承中,原型属性的问题
function Box(){
this.name='lee';
this.run = function(){
return true;
};
this.color=["blue",'red'];
}
function Desk(){}
Desk.prototype = new Box();
var desk = new Desk();
desk.name='jack'; //这里添加了实例属性
alert(desk.hasOwnProperty('name'));// true 判断name是否为实例属性
//该方法判断 属性是否在原型中。
function isProperty(object,property){
return !object.hasOwnProperty(property)&&(property in object);
}
alert(isProperty(desk,'name'));//false
desk.run = function(){
return false;
};
alert(desk.hasOwnProperty('run'));//true
alert(isProperty(desk,'run'));//false
desk.color = ['black'];
alert(desk.hasOwnProperty('color'));//true 判断color是否在实例属性
alert(isProperty(desk,'color'));//false 判断color是否在原型属性
desk.color = ['black'];
alert(desk.name); //jack
alert(desk.run()); //flase
alert(desk.color); //black
var desk2 = new Desk();
alert(desk2.name); //lee
alert(desk2.run()); //true
alert(desk.color); //black
var box = new Box();
alert(box.color); //blue,red
Desk.prototype 是 Box 的一个实例,
Box的实例属性也就成为Desk的原型属性。
改变desk的属性name和run,color,
问题一:
desk中name,run值得改变,没有改变desk2中name和run的值。
改变color的值,却改变了desk2中color的值。
问题二:
对于color。在Desk的第二个实例desk2中的值为black,说明属性是共享的。
为什么我在判断color是在原型时为false。判断是在实例属性时为true