Как получить “этот” (объем) анонимной функции JavaScript?

java.lang. Runtime.totalMemory () даст Вам необходимую информацию - http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html

8
задан Community 23 May 2017 в 10:34
поделиться

1 ответ

e-satis,

Единственный способ сделать это - использовать метод call или apply для установки правильного «контекста».

Чтобы решить вашу проблему, измените функцию панели, чтобы она принимала функцию обратного вызова, а также область действия, применяемую к этой функции обратного вызова.

function bar(callback, scope)
{
    callback.apply(scope);
}

bar(ObjectFromOtherLibIAmNotSupposedToknowAbout.foo, ObjectFromOtherLibIAmNotSupposedToknowAbout);

В качестве альтернативы вы можете использовать метод привязки.

Function.prototype.bind = function(context) {
  var fun = this;
  return function(){
    return fun.apply(context, arguments);
  };
};

Теперь вы можете оставить функцию панели нетронутой и изменить вызывающий код, чтобы он выглядел так:

bar(ObjectFromOtherLibIAmNotSupposedToknowAbout.foo.bind(ObjectFromOtherLibIAmNotSupposedToknowAbout));

РЕДАКТИРОВАТЬ:

Как я отмечал в комментарии, это ответственность вызывающего кода за передачу правильной функции обратного вызова. Ваша функция 'bar' не может определить, какой диапазон использовать, точка.

Возьмем это для примера,

var LibObject = { foo: function() { //use this inside method } };

var fooFunction = LibOjbect.foo;
bar(fooFunction);

Как вы собираетесь выяснить, какой должна быть область действия? Теперь вам нечего «разбирать», и вы не можете изменить функцию «bar», чтобы это работало.

6
ответ дан 5 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

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