我的Javascript对象继承了什么?

时间:2013-12-05 23:45:26

标签: javascript object inheritance

如果我有一个功能对象:

function Calculator()
{
// some code
}

然后我实例化:

var calc=new Calculator();

说我的计算是否正确

  1. 是一个Calculator对象(并继承自Object对象)?
  2. 继承自Calculator对象(而这又继承自Object对象)?
  3. 感谢您澄清这一点,干杯,

4 个答案:

答案 0 :(得分:4)

每个变量都是Object,因此具有Object的方法和属性。但是,从技术上讲,JavaScript中没有真正的继承,因为它是一种原型语言而不是经典语言。但是,因为一切都是对象而且一切都是可变的,所以可以通过将一个对象的属性分配给另一个对象来模仿继承。请参阅jQuery的extend方法或CoffeeScript的类扩展。

但是,要回答你的问题:

  1. 是的,calcCalculator的一个实例,意味着其原型为Calculator
  2. 不,见上文

答案 1 :(得分:2)

嗯...我的理解是它一个计算器对象,但继承并不是一个公平的术语。

它是 Calculator对象的实例,它又是对象的实例。但由于它们不是传统上想象的类,因此术语“继承”在技术上并不正确。

答案 2 :(得分:0)

JavaScript中的所有对象都从类型Object“继承”。我把单词inherit放在引号中,因为它不是经典继承,而是原型继承,因为JavaScript是基于原型的语言。

阅读更多相关信息here(说真的,因为除非你了解原型,否则这不会有任何意义)。

现在,对您的问题的简单回答是new Calculator()创建了Calculator的实例,该实例继承自Object。因此,数字1 little 更接近。数字2是错误的,因为计算器对象不会从自身继承。这是is-a关系。

现在还有一件事:功能类型。实际上,我们在经典术语中的“继承”如下所示:

Calculator < - Function < - Object< - 站立对于inherits from

答案 3 :(得分:0)

在JavaScript中根本不知道inheritance。你的Calculator事物基本上是一个对象,它有一个名为prototype的属性,它被用作Calculator对象的所有实例的原型。

基本上calculator = new Calculator将是Calculator的实例,但在内部所有属性(直到您明确更改它们)将指向Calculator.prototype。换句话说,一个新的calculatorCalculator.prototype几乎是同一个对象,但在JavaScript解释器中有一个不同的object-id。

所以,最后calculatorCalculator的实例,最终是Object,但它不会从Calculator“继承”,因为没有继承,有对象原型可以是任何实例。