3

私が書いた関数が上書きまたは再定義されているかどうかを確認する方法はありますか? たとえば、Jack という名前の人物が以下の機能を持っているとします。

// Jack's function on team 1
function doSomething() {
    // doing things
}

そしてある日、彼は惑星ザクソンの北極にいるチームメイトが同じ関数名を使用していることを知りました。

// Zaxar's function on team 2
function doSomething() {
    // doing something else
}

ご覧のとおり、Zaxar と Jack は同じ関数名を使用しています。Zaxar も John も、プロジェクトの開始から 6 か月経つまで問題を発見しませんでした。彼らは関数にアラートを入れて実行時にチェックできることを知っていますが、Zaxar と Jack の両方に 2 兆個の関数があり、100 万個の JavaScript ライブラリを使用しており、各関数にアラートを入れるのは非現実的であることに気付いているとしましょう。

実行時に名前の衝突があるかどうかを Zaxar と Jack が発見できるようにする方法はありますか? または、JavaScript エンジンに名前の衝突でエラーをスローするように指示する設定はありますか?

詳細情報
いくつかのライブラリに読み込んでいますが、そのうちの 1 つが私と同じ関数名を使用していると思います。したがって、この例では、私が関連付けることができる別の開発者は実際にはいません。私がロードしたライブラリが同じ関数名を使用しているかどうかを調べて、このようなことが起こらないようにしています。

4

1 に答える 1

1

名前空間に関する提案は適切ですが、特定の関数の上書きを防ぎたい場合は、 Object.definePropertywritable記述子のプロパティとconfigurableプロパティにも関心があるかもしれません。

Object.defineProperty(window, "myUnchangeableFunction", {value: function () {
    alert("Can't change me");
}, writable: false, configurable: false});

/*
function myUnchangeableFunction () { // TypeError: can't redefine non-configurable property 'myUnchangeableFunction'
    alert('change?');
}

var myUnchangeableFunction = function () { // TypeError: can't redefine non-configurable property 'myUnchangeableFunction'
    alert('change?');
};
*/

myUnchangeableFunction();

ただし、一部の古いブラウザーではこの機能がサポートされていない可能性があるため、サポートしたいブラウザーでのサポートを確認する必要があります。

于 2013-10-14T06:09:45.977 に答える