2

私は JavaScript 用の新しい OOP モデルに取り組んでいます。オブジェクトのメソッドを列挙可能にするのが正しいのか、それともデータ メンバーだけにするのが正しいのか疑問に思っています。どちらにもある程度の意味があり、おそらく明確な答えはありません。

独自のメソッドを列挙可能にし、継承されたメソッドを列挙できないようにすることもできます...

とはいえ、継承されている場合でも、すべてのデータメンバーを列挙可能にすることは、とにかく理にかなっていると思います。

更新:これは、人々が答えていることからは明らかではないようです。ユーザーが次のようなものを記述してクラスを宣言できるようにする OOP モデルを作成しています。

更新 2 : プロジェクトが終了するまでの間に、これはOoJsになりました。その中で、メソッドを含むユーザー定義のプロパティは列挙可能ですが、フレームワークによって追加されたプロパティは列挙できません。

;(function( namespace )
{
   'use strict';

       namespace.Shape = Shape
   var Static          = namespace.OoJs.setupClass( "Shape" )


   // Data members
   //
   Static.canvas = null


   Static.Protected( "canvas" )  // Protected members

   Static.Public   ()            // Public members


   // constructor
   //
   function Shape()
   {
      // Data members
      //
      this.sides = null

      // Private methods
      //
      this.init  = init


      this.Protected( "sides" )               // Protected members


      var iFace = this.Public( getOffset )    // Public interface


      this.init() // for example      


      return iFace
   }


   // Method definitions
   //
   function init     (){ /*do something useful*/   }
   function getOffset(){ return [ this.x, this.y ] }

})( window )

したがって、問題は、これを使用してクラスを宣言する場合、メソッドを列挙可能にするかどうかを想定/希望するか、または列挙可能にするかどうかをクラス全体またはメンバーごとに構成する方法があるかどうかです。

4

2 に答える 2

0

キーに何らかのセマンティクスが関連付けられていない限り (オブジェクトのユーザーがそのプロパティを反復処理することを推奨します)、メソッドを列挙可能にすることに利点も欠点もありません。

それらを隠しても何も得られず、スクリプトを解釈または部分的に評価する IDE やその他のツールはgetOwnPropertyNames、オートコンプリートなどを提供するために常に使用できます。

Object.getOwnPropertyNames

指定されたオブジェクトで直接見つかったすべてのプロパティ (列挙可能か否か) の配列を返します。

于 2013-08-05T18:04:02.760 に答える