2

私はオブジェクトリテラルとして記述されたアプリケーションフレームワークに取り組んでいます。簡単にするために、次の2つのことを行います。

  1. オブジェクトをグローバルに利用できるようにする
  2. すべての参照に(グローバルに定義された)オブジェクト名を使用します(vs. using this

それで、私はいくつかのテストを実行し、調査を行いましたが、このアプローチを採用しない正当な理由を見つけていません。私の質問は-私は何かが足りないのですか?パフォーマンステストは実際には私の方法を支持しているようであり、ロジスティックレベルからは問題は見られません。this他のフレームワークを見ると、さまざまなものが見られますが、このリファレンスは多くのプログラマーから尊敬されていることを私は知っています。

参考のために...

私のアプローチのごくわずかな例:

var myobj = {

    someVal: 'foo',

    init: function(){
       // Make myobj available globally
       window.myobj = myobj;
       // Fire off a method
       myobj.doStuff();
    },

    doStuff: function(){
        // Just print out the contents...
        console.log(myobj.someVal);
    }
}

myobj.init(); 

参照はすべてグローバルであり、ではないことに注意してくださいthis

私が言ったように、私はこれの混合を見てきました、私はこれが長期的に問題を引き起こす可能性があるかどうか、またはこれが何も大したことではないかどうかを知りたいと思います。

4

1 に答える 1

3

制限に関する限り、最初に頭に浮かぶのは、このオブジェクトのインスタンスは 1 つしか持てないということです。新しいオブジェクトを初期化しようとすると、オブジェクトが消去されます。

thisグローバル変数名ではなく使用するもう 1 つの理由は、変数thisの名前が変更された場合でも正しいオブジェクトを指すことです。

これを、名前が決して変わらない「一度作成する」グローバルオブジェクトにしたい場合、この手法は技術的に間違っていません。しかし、それ以外の状況では使用できません。要件が変更された場合 (たとえば、選択した変数名と名前の競合を引き起こすライブラリを使用する場合) に適応できるコードを書くことを検討する方がおそらく賢明です。

を使用thisすると、変数名の追跡について心配することなく、変数の名前を柔軟に変更してさまざまなコンテキストで渡すことができます。また、名前の競合が発生した場合の変更も容易になります。

于 2013-02-10T19:39:38.900 に答える