5

だから私はこのような関数を作成しました、

var functionName = function(arg1) { //code logic here; }

同時に、この関数がオブジェクトとして機能する必要があります。実際には何も保存されませんが、データは別のオブジェクトからアクセスされます。

var myObj = new Object();
myObj.x = 3;
myObj.y = 4;

だから私が行くとき、functionName.xそれは戻るはずmyObj.xです。オブジェクトは別のmyObj場所で維持されており、私はそれを制御できません。

これは私が現在それを実装する方法です、

functionName.__proto__ = myObj;

それは正常に動作します。しかし、__proto__すでに廃止されており、他に安全な方法があるかどうかを確認したいと思います。オーバーライドを考えFunction.prototypeましたが、うまくいきません。

4

3 に答える 3

1

myObjへのデリゲートを実装する必要があります。

     var functionName = function(arg1) { // code }

     functionName.myObj = new MyObj();
     for (prop in functionName.myObj) {
       if (functionName.myObj.hasOwnProperty(prop)) {
         functionName.__defineGetter__(prop, function() { return functionName.myObj[prop]; } );
       }
     }
于 2012-09-16T02:29:44.657 に答える
1

私はここで同じ問題を抱えています。残念ながら、EcmaScript 5.1 では適切な解決策はありません。

言語仕様http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdfでは、13.2「Creating Function Objects」で、[[Prototype]] 内部プロパティが新しく作成された関数オブジェクトは、常に標準の組み込み Function プロトタイプ オブジェクトです。

同じ仕様の 13.3 に詳述されているように、 Function コンストラクターを使用しても、 によって構築された関数new Function(…)は 13.2 に詳述されているメソッドも使用するため、役に立ちません。prototype(これは、 のプロパティがFunction書き込み可能でも構成可能でもないという事実に反映されています。

したがって、目的を達成するには、既存のオブジェクトのプロトタイプを変更するメソッドが必要です。幸いなことに、今後の Ecmascript 6 標準はObject.prototype.__proto__、最近のドラフトhttp://wiki.ecmascript.org/lib/exe/fetch.php?id=harmony%3Aspecification_drafts&cache=cache&media=harmony:working_draft_ecma-の附属書 B.2.2 に従って標準化されているようです。 262_edition_6_05-14-13-nomarkup.pdf .

于 2013-06-06T11:45:11.353 に答える
-1

機能の を設定できprototypeます。

function functionName(arg1) { 
    //code logic here;
}

var myObj = { x: 3, y: 4 };
functionName.prototype = myObj;

var obj = new functionName();
console.log(obj.x, obj.y); // will output 3, 4
于 2012-09-16T02:36:06.300 に答える