0

假设我有一个像这样的“类”(我正在使用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's 方法。为什么?

提前致谢。

4

2 回答 2

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__有,但还没有标准化。

于 2013-07-27T17:26:20.027 回答
1

你为什么不只是:

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

  var myClass = function() {

    this.color = 0;

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


  };

  myClass.prototype = new superclass;    
  return myClass;

});

在返回定义之前,您可以制作任何您想要的东西。

于 2013-07-27T17:31:35.040 回答