函数声明中指定的基于原型的继承

时间:2013-07-27 17:19:31

标签: javascript inheritance requirejs prototype

假设我有一个像这样的“类”(我正在使用RequireJS):

myClass.js

define(function() {

  return function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }    
  };    
});

如果我想启用继承,我可以这样做:

 // later, in another file...
 myClass.prototype = new superclass();

但为什么我不能直接在函数声明中定义原型呢?

define(['superclass'], function(superclass) {

  return function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }

    this.prototype = new superclass;
  };    
});

如果我运行它,myClass不会继承superclass的任何方法。为什么呢?

提前致谢。

2 个答案:

答案 0 :(得分:1)

这会起作用(至少在FF和Chrome中)。但请注意,每个实例都有自己的原型 - 在大多数情况下这是一个不必要的复杂功能。

define(['superclass'], function(superclass) {

  return function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }

    this.__proto__ = new superclass;
  };    
});

prototype是构造函数的属性。它不对应于对象的原型。 __proto__确实如此,但尚未标准化。

答案 1 :(得分:1)

你为什么不:

define(['superclass'], function(superclass) {

  var myClass = function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }


  };

  myClass.prototype = new superclass;    
  return myClass;

});

在返回定义之前,你可以做任何想做的事。