【问题标题】:using JavaScript object syntax or jquery code to create class members that are classes themselves使用 JavaScript 对象语法或 jquery 代码来创建本身就是类的类成员
【发布时间】:2012-01-27 09:23:55
【问题描述】:

我有以下几点:

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 中术语使用不准确的人。

【问题讨论】:

  • 我感觉 jQuery 可能不是在 javascript 中进行原型 OOP 的最佳库。
  • 我的(现在恢复的)原始主题没有专门提到 jQuery。我更希望有一种我可能不知道的语法。 { class2:ctor,class.prototype:{methods}} 之类的东西(不起作用...)
  • JSON 是一种数据格式。它不做类或函数,与这个问题没有任何关系。
  • 很抱歉让你生气了@Quentin,我知道 JSON 是一种数据格式。在“严格”的 JOSN 中,您根本无法拥有 {a:function(){}}。但是当使用这种“对象表示法”在 javascript 中编写代码时。你可以。你怎么称呼这种语法?

标签: javascript jquery oop


【解决方案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 的“经典”方式。我不确定这是否有帮助,但知道它可能会很有用。

【讨论】:

  • 你是对的。我在这里使用了错误的术语。我的问题是关于本身就是班级的班级成员。我将编辑 Q 以反映这一点。这个有什么好听的简称吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2011-09-22
  • 1970-01-01
  • 2012-08-31
  • 2016-07-27
  • 1970-01-01
  • 2019-10-02
相关资源
最近更新 更多