1

js のプロトタイプの継承を試した後、オブジェクトのメソッドをオブジェクトの外部で宣言しなければならないという考えに夢中ではないことがわかりました。

function obj(){
  this.averyday='i\'m shuffle\'n';
  this.gibmo='dinero';
  this.pullOut='that\'s what she said lol';
}

obj.prototype.alertProp=function(){
    alert(this.averyday);
}
obj.prototype.alertProp2=function(){
    alert(this.gibmo);
}

そこで、メソッドを 1 つの名前空間に整理する方法を思いついた

obj.prototype.m={
    //i'm passing in the object instance so the mathods can have access to it's properties
    alertProp:function(that){
          alert(that.theObj.everyday);
    },
    alertProp2:function(that){
          alert(that.myObj.gibmo+' '+that.myObj.someVal); // alerts "dinero some other value to be use "
    }
} 
var myobj = new obj;

次に、メソッドを呼び出してオブジェクトインスタンスを渡すだけです(メソッドがオブジェクトのプロパティを変更する必要がある場合)

myobj.m.alertProp({theObj:myobj,someVal:'some other value to be use'}) //alerts "i'm shuffle'n"

だからここに私が気づいたいくつかの長所があります:

長所:

1) メソッドを 1 つの集中領域に編成します。

2) オブジェクトの「プロトタイプ」に 1 回だけアクセスします (実際には使用するコードが少なくなります)。

3)より読みやすいようです(少なくとも私には)。

短所:...これは私が皆さんの助けを必要とするところです.誰かがこのようにすることに何か問題があると思いますか? パフォーマンスの問題や、私が概説したプロの何か問題など...?

また、私が見ていない、または明らかではない他のプロを見ている人はいますか?

4

1 に答える 1

1

少し複雑だと思いますが、これが私の好きな方法です。

MyObject = function (options) {
   this.init(options);
};

MyObject.prototype = {
  /**
   * Documentation
   */
  variable1: null,

  init: function (options) {
    // do something with options.
  },

  alertVariable: function () {
    alert(this.variable1);
  }
};

したがって、追加のパラメーターを送信することを心配する必要はありません。呼び出すだけです。

- - - - - - - - - - - - - - 編集 - - - - - - - - - - - ------------

まあ、それが正しいかどうかはわかりませんが、読んだ後、これは「コンストラクターを修正する」ことを意味すると思います。次のようなオブジェクトを作成すると:

Foo = function () {
  // Do something
};

それからFoo.prototype.constructor == Foo、予想通り。私の方法の問題(Raynosに感謝)は、私がこれをやっているときです:

Foo.prototype = {...};

私は Foo のプロトタイプをすべて上書きしているので、Foo.property.constructor != Fooそれは私たちが期待するものではありません! その代わりに、それがありFoo.property.constructor == Object.prototype.constructorます。

では、どうやって修正するのでしょうか?

Foo.prototype = {
  constructor: Foo, // <-- FIXED!
  ...
};

タダ!

(これは大いに役立ちました: http://beej.us/blog/data/javascript-prototypes-inheritance/ )

于 2012-04-12T20:53:51.123 に答える