javascript对象继承时函数的定义

刚刚在高校俱乐部自测时遇到的一道javascript题目,拿出来和大家分享。

题目:

<script type="text/javascript">
function Person() 
{
}
Person.prototype.move = function() { alert(this.name+"移动");}
function Student(name) 
{
this.name = name;
}
Student.prototype.study = function() { alert(this.name+"学习"); }
Student.prototype = new Person();
var st = new Student("张三丰");
st.study(); 
st.move(); 
</script>

问结果是什么。经过测试结果是 :程序出错,什么都不能输出。

然后把st.study();去掉之后就能够运行,所以是

Student.prototype.study = function() { alert(this.name+"学习"); }
Student.prototype = new Person();
这边出错了。自己得出结论在一个对象通过prototype继承另外一个对象之后,不能再通过prototype添加其他函数。如果要添加函数的话应该是在对象内部实现,

修改之后如下:

<script type="text/javascript">
function Person() 
{
}
Person.prototype.move = function() { alert(this.name+"移动");}
function Student(name) 
{
this.name = name;
this.study=function(){
	alert(this.name+"学习");
}
}
Student.prototype = new Person();
var st = new Student("张三丰");
st.study();
st.move(); 
</script>
就能够实现 依次输出”张三丰学习” “张三丰移动”的函数。

为什么会这样呢?具体的原理是什么?希望有大神指点




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值