50

javascript の「window」オブジェクトに任意の属性を追加できますか? 何かのようなもの:

window.my_own_attr = "my_value"

ライブラリに副作用はありますか?また、クロスブラウザ互換性はありますか?

4

7 に答える 7

73

javascript の「window」オブジェクトに任意の属性を追加できますか?

はい、あなたが示したように。

ライブラリに副作用はありますか?

いいえ、上書きするプロパティを設定するライブラリを使用しない限り、そうではありません。

また、クロスブラウザ互換性はありますか?

はい、完全に。


そうは言っても、この慣行は一般的に嫌われています。不要なものを上書きしてしまう可能性があります。

于 2012-10-05T09:06:38.337 に答える
15

すべてのブラウザで、はwindowJavaScript グローバル名前空間です。すべてのプロパティまたはメソッドは、その名前空間に「存在」します。したがって、プロパティを に割り当てるとwindow、それは実質的にグローバル変数になります。

例:

window.myConstant = 5;

// note: a var declaration will be a window property too
// note 2: 'let' or 'const' will not be window properties
// below can also be done without 'var'.
var myConstantGlobal = 4;

console.log(`multiply(10) => ${multiply(10)}`);
console.log(`multiply() => ${multiply()}`);
console.log(`multiplyGlobalVar(10)) => ${multiplyGlobalVar(10)}`);
console.log(`multiplyGlobalVar() => ${multiplyGlobalVar()}`);
    
function multiply(val){
  return myConstant * (val || 1);
}

function multiplyGlobalVar(val){
  return window.myConstantGlobal * (val || 1);
}

JavaScript フレームワークには注意が必要です。たとえば、 を宣言してフレームワークwindow.JQueryを使用すると、名前空間が割り当てに置き換えられ、役に立たなくなります。JQueryJQuery

于 2012-10-05T09:13:54.570 に答える
4

はい、できますが、一般的にはすべきではありません。

このwindowオブジェクトは JS のデフォルトの「グローバル」オブジェクトでもあるため、すべてのグローバル変数がそこに追加されます。

既に存在するプロパティを上書きしない限り、何かを壊す可能性は低いですが、 に変数をダンプしwindowたり、大量のグローバル変数を作成したりするのは悪い習慣と考えられています。

于 2012-10-05T09:06:48.310 に答える
1

IE では、要素に ID がある場合、そのノードはウィンドウ オブジェクトでプロパティとしてアクセスできます。

<div id="num"></div>

alert(num); //Element

num = 3; //throws exception

var num = 3; //ok

于 2012-10-05T10:39:44.717 に答える
0

同じ変数名を使用するまで、どのライブラリとも競合せず、すべてのブラウザーで動作しますが、グローバル JS 変数が作成されるため、お勧めしません。

于 2012-10-05T09:08:00.380 に答える