【问题标题】:javascript function object's inherit method behaviourjavascript 函数对象的继承方法行为
【发布时间】:2010-12-29 21:18:54
【问题描述】:

我遇到了函数对象的一种行为。这似乎类似于原型设计,但使用了不同的方法。

var Car = function() {
    this.foo = 'shiny';
}

var Rover = function() {
    this.inherit = Car;
    this.inherit();
}

var Mini = function() {
    this.inherit = Car;
    this.inherit();
}

当创建子类的新实例时,this.inherit 方法对自身具有调用父类的效果,从而使父类的属性和方法可供子类使用。

var myRover = new Rover();

var myMini = new Mini();
myMini.foo = 'rusty';

console.log(myRover.foo, myMini.foo); // displays "shiny" & "rusty" respectively

我查看了 Mozilla 和 MSDN,但似乎在任何地方都找不到它的文档。任何人都可以为这种行为和任何进一步的文档命名。

【问题讨论】:

    标签: javascript oop function inheritance object


    【解决方案1】:

    我认为inheritFrom 这个词在这里没有任何意义。也可以是bar。使这项工作有效的原因是您定义了您在下一行调用的“子类”函数的成员的模式。

    可能值得查看 Douglas Crockford 的“Classical Inheritance in JavaScript”文章以获取更多想法。

    【讨论】:

      【解决方案2】:

      inheritFrom 不是 JavaScript 核心对象中存在的方法。 JavaScript 继承可以通过多种方式完成as outlined in this post。你在这里所做的并不是真正正确的继承,因为你只是在一个单独的对象中设置了一个方法,等于一个函数。

      首先声明一个名为superClass 的函数。此函数设置this 对象的foobar 属性。当您在subClass 上设置一个等于superClass 的方法时,this 对象将引用subClass 函数,因为它是该方法的调用者,因此 subClass 具有foobar 的属性设置为@987654333 @ 和'bar'

      但是,当你在这里覆盖 foo 方法时:

      this.foo = function() {
          return this.foo;
      };
      

      你把 foo 变成一个函数。

      请注意,当您添加此脚本时:

      var test = new subClass();
      alert(test.foo);
      

      test.foo 将成为一个函数,因为您在 subClass 构造函数中覆盖了它的值。添加这个:

      alert(test.bar);
      

      将提醒字符串'bar',因为您没有覆盖它。此外,如果您调用test.foo(),它只会返回一个指向test.foo 方法的指针。

      【讨论】:

      • 我已经对方法名称进行了编辑,所以它更有意义。 subClass 方法返回继承的属性。这篇文章看起来很有趣,因为它使用“应用”方法使用第三种继承方式
      • @gawpertron:基本上我想告诉你的是,你并没有真正在这里进行继承。您只是说subClass 对象上会有一个名为myFunction(或其他)的方法。这个myFunction 在你的superClass 函数中运行脚本。 superClass 函数中的 this 关键字引用了它的调用者,在本例中是 subClass 方法。
      • 我已经删除了这个功能。我现在可以看到,您将方法称为“inheritFrom”、“inherit”或“monkeys”没有区别,它与使用“new”关键字具有相同的效果,而是将属性和方法附加到子类。
      • @gawpertron 那么你的问题是什么?您最初的问题是为什么没有记录在案。它没有记录,因为它不是对象的核心方法。如果您还有其他问题,也许您应该接受其中一个答案并提出一个新问题。
      猜你喜欢
      • 1970-01-01
      • 2014-12-27
      • 2023-04-11
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      相关资源
      最近更新 更多