刚刚在高校俱乐部自测时遇到的一道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>
就能够实现
依次输出”张三丰学习” “张三丰移动”的函数。
为什么会这样呢?具体的原理是什么?希望有大神指点