1

次の JavaScript があります。

function b() {
    alert(arguments.caller[0]);
}

function X(x) {
    this.x = x;
}

X.prototype.a = function(i) {
    b();
}

new X(10).a(5);

これにより、メッセージ「5」が表示されます。ただし、「10」を表示したい、つまり関数 b で呼び出し元の「this」プロパティにアクセスしたい。これは可能ですか?

4

3 に答える 3

1

呼び出し元を引数として関数に渡すことができます。

function b(caller) {
    alert(caller.x);
};

function X(x) {
    this.x = x;
};

X.prototype.a = function(i) {
    b(this);
};

new X(10).a(5);

arguments.caller は JS 1.3 で廃止され、JS 1.5 で削除されていることに注意してください。

于 2009-06-20T13:09:31.813 に答える
1
function b() {
    alert(this.x);
}

function X(x) {
    this.x = x;
}

X.prototype.a = function(i) {
    b.call(this); /* <- call() used to specify context */
}

new X(10).a(5);
于 2009-06-20T13:10:06.710 に答える
0

関数 b の呼び出しを無名関数内にラップすることで、間接的なレベルを導入しています。可能であれば、直接設定する必要があります。

function b() {
  alert(this.x);  // 10
  alert(arguments[0]); // 5
}

function X(x) {
  this.x = x; /* alternatively, set this.x = arguments to capture all arguments*/
}

X.prototype.a = b;

new X(10).a(5);

それ以外の場合は、オブジェクトを渡す必要があります。これは、JP または balpha が提案した方法のいずれかで行うことができます。

于 2009-06-20T13:37:40.930 に答える