times
принимает функцию; аргумент context
позволяет вам при необходимости указать значение, на которое ссылается this
внутри этой функции.
В вашем примере обратный вызов, переданный в times
, вообще не использует this
, поэтому он не нужен, но представьте, если обратный вызов зависит от this
, ссылающегося на объект:
const obj = {
count: 3,
increment: function() {
this.count++;
console.log(this.count);
}
};
obj.increment();
obj.increment();
Функция obj.increment
зависит от obj.count
. Чтобы это работало в вашей функции times
, вам нужно, чтобы this
ссылался на obj
, поэтому передайте его как второй аргумент в times
, чтобы obj
передавался как первый параметр в .call
:
Number.prototype.times = function(f, context) {
var n = this.valueOf();
console.log('repeating ' + n + ' times:');
for(var i = 0; i < n; i++) f.call(context, i);
};
const obj = {
count: 3,
increment: function() {
this.count++;
console.log(this.count);
}
};
(3).times(obj.increment, obj);
Пользовательский this
не требуется, если вы передаете другой ] функция для .times
, которая сама вызывает obj.increment
:
Number.prototype.times = function(f, context) {
var n = this.valueOf();
console.log('repeating ' + n + ' times:');
for(var i = 0; i < n; i++) f.call(context, i);
};
const obj = {
count: 3,
increment: function() {
this.count++;
console.log(this.count);
}
};
(3).times(() => obj.increment());
Это, кажется, делает то, что Вы хотите.
очевидно, это использует некоторый скрытый API такой как NtQueryInformationProces
s.
Программа Дескриптора от SysInternals делает это также, но я не уверен как. Я не думаю, что существует единственный зарегистрированный API, чтобы сделать это. Я думаю, что необходимо выполнить итерации по процессам, перечислить каждый из дескрипторов и затем определить имя файла, связанное с тем дескриптором.