JavaScript继承中,原型属性的问题

cocoton 2018-04-22 12:52:07
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


...全文
693 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2018-04-22
  • 打赏
  • 举报
回复
alert(desk2.color);
天际的海浪 2018-04-22
  • 打赏
  • 举报
回复
你少写个2

87,885

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧