Доступ к 'этому' объекту в методах выше в стеке вызовов

Я никогда не понимал, почему люди думают, что это медленнее или медленнее ... я говорю, получи настоящую машину. У меня были смешанные результаты ... Я видел, где время выполнения хранимой процедуры намного медленнее, чем ORM, и наоборот ... Но в обоих случаях производительность была из-за разницы в оборудовании.

1
задан erikkallen 20 June 2009 в 12:48
поделиться

3 ответа

Вы можете передать вызывающего абонента как аргумент функции:

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.

1
ответ дан 3 September 2019 в 01:18
поделиться

Вы вводите уровень косвенного обращения, заключая вызов функции 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.

0
ответ дан 3 September 2019 в 01:18
поделиться
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);
1
ответ дан 3 September 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: