Dean Edwards--Base.js

5967 ワード

私は心から対象に向かうプログラマーです.そしてJavaScriptは継承に基づくプロトタイプをサポートします.不幸なことに、これは長い定義をもたらす.
  • function アニマル(name) {}
  • Animal.prototype.eat = function() {}
  • Animal.prototype.say = function(message) {
  • }
                JavaScript OO    :
  • 、MyClass.prototypeの冗長コードなしで簡単にクラスを作成したいです.
  • リロードされた関数に直接アクセスできるようにしたいです.(Javaのsuperのように)
  • 原型構造段階において、呼び出し種類の構造方法を避けたいです.
  • 静的属性と関数を簡単に追加したいです.
  • 私はグローバル関数に頼らずにプロトタイプチェーンを作成する方式で上記の目的を達成したいです.
  • 上記の目的を達成するためには、同情的なObject.prototypeを使用しないでほしいです.
  • ベースクラス
        JavaScriptのクラス(Base.js)を作成しました.簡単なJavaScript OOが私たちにもたらした苦痛(確かに苦しい)を願っています.これは簡単なクラスです.二つの実例関数とクラス関数を追加してObjectオブジェクトを拡張しました.
    Baseクラスは二つの例示的な方法を定義している.
    exted:この方法を呼び出すと、別のインターフェースでオブジェクトを拡張できます.
     
      
    1. var object = new Base;
    2. object.extend({
    3.   value: "some data",
    4.   method: function() {
    5.     alert("Hello World!");
    6.   }
    7. });
    8. object.method();
    9. // ==> Hello World!
    base:          ,  base           :
     
      
    1. var object = new Base;
    2. object.method = function() {
    3.   alert("Hello World!");
    4. };
    5. object.extend({
    6.   method: function() {
    7.     // call the "super" method
    8.     this.base();
    9.     // add some code
    10.     alert("Hello again!");
    11.   }
    12. });
    13. object.method();
    14. // ==> Hello World!
    15. // ==> Hello again!
                  base  。
    クラスを
        Baseクラスのextedメソッドを び すことにより、クラスを することができます.
     
      
    1. var Animal = Base.extend({
    2.   constructor: function(name) {
    3.     this.name = name;
    4.   },
    5.   
    6.   name: "",
    7.   
    8.   eat: function() {
    9.     this.say("Yum!");
    10.   },
    11.   
    12.   say: function(message) {
    13.     alert(this.name + ": " + message);
    14.   }
    15. });
                   extend  ,          Animal     :
     
      
    1. var Cat = Animal.extend({
    2.   eat: function(food) {
    3.     if (food instanceof Mouse) this.base();
    4.     else this.say("Yuk! I only eat mice.");
    5.   }
    6. });
    7.   
    8. var Mouse = Animal.extend();
          
        クラスの でexted に される のパラメータは、クラスインターフェース(javaのStatic に )を しています.
     
      
    1. var Circle = Shape.extend({ // instance interface
    2.   constructor: function(x, y, radius) {
    3.     this.base(x, y);
    4.     this.radius = radius;
    5.   },
    6.   
    7.   radius: 0,
    8.   
    9.   getCircumference: function() {
    10.     return 2 * Circle.PI * this.radius;
    11.   }
    12. }, { // class interface
    13.   PI: 3.14
    14. })
           base     ,    Shape         。         
  • initという の が されている ( な ではない)、クラスが されたときに に び されます.
  • プロトタイプ (デリバティブ) は に び されません.
    プライベートデータを むクラス
        いくつかの がクラスを るのが きな 、 はクラスの で データを します.
  • function Circule(radius) {
  • }
  •   this.get Curcem ference = function() {
  • }
  •     return 2 * Math.PI * radius;
  •   };
  • ;;
  • You can achieve the さとめ レスリング using the ベース クラス:
  • var Circule = Shape.exted({
  • }
  •   constructor: function(radius) {
  • }
  •     this.exted({
  • }
  •       get Curcem ference: function() {
  • }
  •         return 2 * Math.PI * radius;
  •       }
  •     });
  •   }
  • );
  •     このコードはこのような には いものがありますが、ベースメソッドにアクセスすることができます.これは に に つと います.
    のインスタンス
    この に する くの えを えましたが、 に の を することによって、 のインスタンスクラスの を します.
     
      
    1. var Math = Base.extend({
    2.   constructor: null,
    3.   PI: 3.14,
    4.   sqr: function(number) {
    5.     return number * number;
    6.   }
    7. })
      
        これは の いOOフレームに って わるものです. が しかったブラウザにまたがるフレームではありません.
         は スペースを っています.そこではずっとこのメカニズムに づいて かいものを しています.