1

みなさん、こんにちは。

競合の問題を回避するために JavaScript の Object 要素と Function 要素を拡張する方法はありますか? もっと具体的に言ってみましょう:

2 つの .js ファイルがあるとします。

ex1.js は Object.prototype.aMethod=function(){/*a function*/}

ex2.js は Object.prototype.aMethod=function(){/*another function*/}

この状況では、 ex1.js 拡張は ex2.js の拡張によって上書きされます。

私の質問 :

拡張の効果をファイル コンテキストに制限する方法、またはモジュール コンテキストに制限する方法はありますか?

編集:

実際、私は crockford の著書 JavaScript: the good parts を読んでいます。彼はオブジェクトと関数のプロトタイプ拡張を通常のこととして使用しており、競合の問題については語っていません。この本はグローバル名前空間を汚染しないように傾いているので、これは奇妙です。だから私は何らかの回避策があるに違いないと思った。

4

1 に答える 1

2

変更しているオブジェクトがグローバルである場合、プロトタイプの変更はグローバルです。やろうとしていることをサポートするために、モジュール ローカル プロトタイプを使用できます。

var MyObject = function(properties) {
  var key;
  for(key in properties) {
    if(properties.hasOwnProperty(key)) {
      this[key] = properties[key];
    }
  }
};

MyObject.prototype.aMethod = function() {
  console.log(this.name);
}

var obj = new MyObject({name: "blah"});
obj.aMethod();

// Prints "blah"

変更は、継承されたプロパティがその後のすべてのループObject.prototypeで表示されるため、通常、javascript では「悪」と見なされます。変更は、 Sugar.JSなどのライブラリが通常行うオブジェクトの変更とは異なるfor-inことに注意してください。Object.prototypeObject

于 2013-02-03T13:45:25.930 に答える