2012-08-31 114 views
1

我想了解JavaScript中的继承。我正在使用原型将子类链接到它的父级。但只要我定义了关系,父类的构造函数就开始运行。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

+0

检查http://ejohn.org/blog/simple-javascript-inheritance/以及 –

+2

_“但是,只要我定义了关系,父类的构造函数就开始运行了。”_那么,什么是你希望在你写'新的Person()'时发生?我在这里没有看到问题。 '[works-as-designed]' –

+0

对于未来的读者;下面的文字让我明白了JavaScript中继承的思想: --- 即使它被用作原型,父对象仍然可以作为常规对象来操作。这是一个类的原型的主要区别。 --- \t \t \t JavaScript中的所有对象都可以在运行时修改。由于原型对象也是常规对象,我们也可以修改它们。但是,当您修改原型对象时,其更改也会反映到其所有后代对象中。 – Erik

回答

1

这是因为JavaScript是一种原型的语言,并没有真正支持继承那样。它的对象是宽松的类型,可以通过额外的功能和属性进行扩展。

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

的tuturial状态这样的:

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

如果您习惯了真实的(基于类的)OO,那就相当混乱。

+0

非常困惑:但我需要在这里仔细检查。难以形象,这是由设计完成... – Erik

+0

@戈列斯 - 有些人会说Javascript/Scheme是* real * OO,而基于类的东西只是一个苍白的副本。 –

+0

@JeremyJStarcher我知道。我应该把“真实”放在引号或其他内容中。我在这个讨论中没有强烈地选择双方,至少在这里没有。 ;) – GolezTrol