我有一些Java背景,但现在我正在尝试用JavaScript和HTML编写一些简单的游戏。我很难理解OOP是如何工作的,因为看起来有不同的创建对象的方法?我写了这个片段引用了朋友的代码,但是控制台给了我"未被捕获的TypeError:无法设置属性' roar'未定义"。为什么代码适用于他而不适合我?他在运行某种服务器端库吗?
test.js
function Animal() {
this.needsAir = true;
this.roar = function() {
console.log("roar");
}
}
function Bear() {
Animal.call();
}
var init = function() {
var bear = new Bear();
bear.roar();
console.log(bear.needsAir)
}
的index.html:
<html>
<head>
<script type="text/javascript" src="./test.js"></script>
</head>
<body>
<script type="text/javascript">
window.onload = function() {
init();
}
</script>
</body>
</html>
答案 0 :(得分:6)
您需要将this
传递给.call
。
function Bear() {
Animal.call(this);
}
此外,您的原型继承也不完整。
答案 1 :(得分:0)
您的功能有不同this
- 尝试使用apply
方法,这会让您更进一步,例如;
function Bear() {
Animal.apply(this);
}
需要更多javascript,例如原型定义
答案 2 :(得分:0)
你的Bear函数需要将this
传递给Animal call。
为了更好地理解javascript继承,您可以查看此blog on understanding javascript inheritance