为什么这个继承示例在我的计算机上不起作用?

时间:2015-09-04 00:17:51

标签: javascript oop inheritance

我有一些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>

3 个答案:

答案 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