假设我有一个像这样的“类”(我正在使用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
的任何方法。为什么呢?
提前致谢。
答案 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;
});
在返回定义之前,你可以做任何想做的事。