我有以下几点:
var Class1=function(p1,p2){
//ctor code
}
Class1.prototype={
method:function(){...},
method:function(){...}
}
我希望Class2成为Class1的成员 所以我可以写:
instance2=new Class1.Class2(...)
或在Class1的方法中,我可以写:
this.instanceOfClass2=new this.Class2(...);
我知道我可以添加:
Class1.prototype={
...,
Class2:function() {
}
}
Class1.prototype.Class2.prototype={
//Class2 methods go here
}
但是这种语法的缺点在于它将Class2的方法放置在远离构造函数的位置。
我可以创建一个Class(ctor,methods)
构造函数,然后使用
Class1.prototype={
...,
Class2:Class(function() {
//Class2 ctor
},
{
//Class2 methods go here
}
}
}
但是如果有更好的方法可以徘徊。
我感谢所有在Q的原始版本中评论使用不准确术语的人。
答案 0 :(得分:1)
您似乎误解了子类化的基本原则。子类是每个定义而不是附加到父对象的另一个类,更像是继承父类的类。
考虑一下:
Class1 = function() {
// constructor
}
Class1.prototype = {
constructor: Class1,
method1: function() {
// public method
}
};
Class2 = function() {
//subclass constructor
}
Class2.prototype = new Class1(); // this is where the inheritance happens
var instance = new Class2();
instance.method1();
这是在javascript中处理子类化/ OOP的“经典”方式。我不确定这会有什么帮助,但知道它可能会有用。