JS Как создать объект методом "new", который можно вызвать как функцию - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь понять, что делает вредоносный JS-скрипт. Сценарий запутан, поэтому не могу читать самостоятельно. Я знаю, что он создает ActiveXObject объект.

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

var x = new ActiveXObject('file_name')

Google Scripts не позволяет вам объявлять ваши собственные классы (не так ли?), Поэтому я объявляю функцию конструктора для нового объекта AX. Все работает нормально, пока вирус не попытается получить доступ к объекту AX как функция типа

var AX = new ActiveXObject()  
AX()

Это несоответствие возвращаемого типа (Object! = Function).

Там мой код: https://script.google.com/d/1IrkYN_Sg0j_uiMD4fAmEPag3HLH07c1fd2t7QOQEphEg38R-t0LAPIAF/edit?usp=sharing

Я комментирую строку 195 для предотвращения ошибки.

Запуск функции doGet для проверки и просмотра журналов. Или просто откройте https://script.google.com/macros/s/AKfycbyiYp4kX07jMwjM6B0fynfMrqQwX1ykJHfy8wFpX6Op/dev

1 Ответ

0 голосов
/ 06 апреля 2019
function Foo(x){
  var res = function(a,b){
    //do something when call like function
    return a+b;
  };

  //add props & methods
  res.bar = x; //some prop
  res.add = function(a){return res.bar+=a} //some method
  res.quad = function(){return (res.bar*res.bar)} //other method

  return res; //return function with custom prop&methods
};

var foo = new Foo(1);

console.log(foo.bar); //1 
console.log(foo.add(2)); //3
console.log(foo.bar); //3
console.log(foo.quad()); //9
console.log(foo.bar); //3
console.log(foo(8,10)); //18 call like function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...