2

入力を格納された値だけ単純にインクリメントする関数を定義するとしますdd

var obj={}
obj.dd=1
obj.f=function(x){
    return x+this.dd
}

または、次のようにクロージャーを作成することもできますddが、これにより、後で変更できるものではなく、静的なインクリメントが作成されます。

var dd=1
var f=function(x){
    return x+dd
}

ddまたは、関数自体に格納することもできます。

var obj={}
obj.f=function(x){
    return x+this.f.dd
}
obj.f.dd=1

self関数が親オブジェクトを経由せずに、関数自体にアタッチされた変数を取得できるかどうか、関数自体を参照して次のことを許可するキーワードのようなものが可能かどうかについて興味があります。

var f=function(x){
    return x+self.dd
}
f.dd=1

そんなことをしなくてもいいのはわかっていますが、できたらかっこいいと思います。

4

2 に答える 2

5

関数リテラルに名前を付けることができます:

var f = function me(x) {
    return x + me.dd;
};

f.dd = 1;

ただし、これは古いバージョンの IE/JScript では適切に機能しません。同じオブジェクトを と が参照していないmeからです。f(廃止され、厳密モードでは使用できません)代替手段は次のarguments.calleeとおりです。

var f = function(x) {
    return x + arguments.callee.dd;
};

f.dd = 1;

また、閉鎖に関するあなたのメモは正しくありません。別の関数を使用しても、後で変更できます。

var dd = 1;
var f = function(x) {
    return x + dd;
};

var setdd = function(_dd) {
    dd = _dd;
};
于 2013-08-17T16:56:42.743 に答える