【问题标题】:JavaScript inheritance and constructors [closed]JavaScript继承和构造函数[关闭]
【发布时间】:2012-08-31 21:01:32
【问题描述】:

我正在尝试理解 JavaScript 中的继承。我正在使用原型将子类链接到它的父类。但只要我定义了关系,父类的构造函数就会开始运行。

    <script type="text/javascript">
        function Person ()
        {
            window.alert('We\'ve got a new person!');
        }

        function King ()
        {
            window.alert('We\'ve got a new king!');
        }

        King.prototype = new Person();

        //King.prototype.constructor = King;
        //var erik = new King();
    </script>

在 JavaScript 中使用继承的正确方法是什么?

引发困惑的教程:https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript

【问题讨论】:

  • “但是一旦我定义了关系,父类的构造函数就开始运行了。” 那么,当你写new Person()时你期望发生什么?我认为这里没有问题。 [works-as-designed]
  • 给未来的读者;下面的文字让我理解了 JavaScript 中继承背后的思想: --- 即使它被用作原型,父对象仍然可以作为常规对象进行操作。这是原型与类的主要区别。 --- JavaScript 中的所有对象都可以在运行时进行修改。由于原型对象也是常规对象,我们也可以修改它们。但是,当您修改原型对象时,其更改也会反映到其所有后代对象。

标签: javascript oop inheritance


【解决方案1】:

这是因为 Javascript 是一种原型语言,并不真正支持这种方式的继承。它的对象是松散的类型,可以通过额外的功能和属性进行扩展。

所以你实际上要做的是创建一个Person 的instance,然后可以使用额外的方法对其进行扩展。

教程是这样写的:

在 JavaScript 中,您通过分配父类的实例来做到这一点 到子类,然后专门化它。

如果您习惯于真正的(嗯,基于类的)OO,那会相当混乱。

【讨论】:

  • 非常令人困惑:s 但我需要在这里仔细检查。很难想象这是由设计完成的......
  • @Golez -- 有些人会说 Javascript/Scheme 是真正的 OO,而基于类的东西只是一个苍白的副本。
  • @JeremyJStarcher 我知道。我应该把“真实”放在引号之类的。我不会在讨论中强烈地选边站,至少不是在这里。 ;)
猜你喜欢
  • 2021-11-15
  • 2013-09-17
  • 1970-01-01
  • 2014-09-02
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多