javascript继承问题

debugdebugger 2012-04-25 11:37:20

<html>
<head>
<title>Example</title>
</head>
<body>
<script type="text/javascript">
function ClassA(sColor) {
this.color = sColor;
}

ClassA.prototype.sayColor = function () {
alert(this.color);
};

function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}

ClassB.prototype = new ClassA();
//这里将ClassB的prototype设置为ClassA的一个实例
//那么ClassB的name属性不会被丢弃吗?
//子类的属性和方法不是应该出现在 prototype 属性被赋值后吗?
ClassB.prototype.sayName = function () {
alert(this.name);
};


var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();
objB.sayColor();
objB.sayName();

</script>

</body>
</html>

...全文
76 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingViker 2012-04-25
  • 打赏
  • 举报
回复
prototype 其实就和java里面的类的静态变量一样,
楼主:将将ClassB的prototype设置为ClassA的一个实例,只是将classB的prototype指向了一个对象,找个对象是classA的实例,这个和classA的prototype是不冲突的,就是你java里面你new 在多的对象,也只有一个静态变量.

那么ClassB的name属性不会被丢弃吗? prototype相当于静态变量, 怎么可能干扰成员变量?

子类的属性和方法不是应该出现在 prototype 属性被赋值后吗? 这个问题怎么会有子类? 虽然classB的prototype指向了classA的实例,但是这个也classA本身的定义是扯不上半点关西的.

当然以上的情况不包括命名重复.
荔枝 2012-04-25
  • 打赏
  • 举报
回复
那么ClassB的name属性不会被丢弃吗?
当然不会了,sName是构造函数里面的活动变量可以在里面访问到的。

子类的属性和方法不是应该出现在 prototype 属性被赋值后吗?
这里其实就是把A的实例替换掉了原来B的原型变量,

不知道该怎么回答了,你的问题问的不是太清楚,http://blog.csdn.net/a569171010 这里有我才写的几篇文章,也是关于这个的,应该能看懂,不懂的可以问我啊。
debugdebugger 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

那么ClassB的name属性不会被丢弃吗?
当然不会了,sName是构造函数里面的活动变量可以在里面访问到的。

子类的属性和方法不是应该出现在 prototype 属性被赋值后吗?
这里其实就是把A的实例替换掉了原来B的原型变量,

不知道该怎么回答了,你的问题问的不是太清楚,http://blog.csdn.net/a569171010 这里有我才写的几篇文章,也是关于这个的,……
[/Quote]
好的

87,910

社区成员

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

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