-1

すべてのページで top という名前の Javascript 関数を使用して、標準化された見出しを設定しています (ほぼ 2000 のサブページで)。しかし、これは Chrome では機能しません。それは(コンソールで)それを主張します

  1. top は既に定義されています (ここで、2 つのパラメーターを使用して関数を定義しようとしています)。
  2. オブジェクトのそのプロパティ「トップ」は[object Windows]関数ではありません(私が使用する場所)

そのため、Chrome はパラメーターのないオブジェクト プロパティと 2 つのパラメーターを持つユーザー定義関数を区別していないようです。

これは、IE、Firefox、Opera、Safari で受け入れられます。

4

4 に答える 4

3

topwindow-objectの定義済みプロパティです。これはすべてのブラウザに当てはまりますが、他のブラウザは上書きに寛容ですが、chrome はそうではありません。

最も簡単でクリーンな方法は、プロパティの名前を変更することです。

以下は、避けるべき単語のリストです。

予約語
クラスとオブジェクト
グローバル プロパティとメソッド

于 2012-08-15T12:33:56.880 に答える
1

次のように入力します。

Object.getOwnPropertyDescriptor(window.top).writable;

window.topChrome Web 開発者コンソールでは、少なくとも chrome では書き込み可能ではないことがわかります。また、別の名前を使用するか、独自の名前空間内に配置してください。

于 2012-08-15T12:37:31.307 に答える
0

衝突しないように、アプリケーション/JavaScript の新しいコンテキストを作成してみてください

(function(realTop,realWindow) {
   function top() {
      // do something
   }

   // calls our top function
   top();

   realTop.
})(top, window);

ここで、realTop は元のトップ オブジェクトへの参照であり、realWindow はサンプル コンテキスト内の元のウィンドウ オブジェクトへの参照です。

しかし、私の意見では、将来このような名前を避けるようにしてください

于 2012-08-15T12:33:20.587 に答える
0

関数の名前を、「topHeader」や「theHeader」などのあまり一般的でない名前に変更する必要があります。「トップ」のような単純な名前は、非常に一般的です。

経験則として、名前の競合の可能性を減らすために、変数と関数をできるだけ一意にする必要があります。

オブジェクト リテラルを使用して、名前の競合の可能性を減らすこともできます。

var myApp = {
     top:function(){
       //excite some code...
   },
      someOtherProp:function(){}
}

myApp.top();
于 2012-08-15T12:35:36.570 に答える