JS如何通过“新”方法创建对象,该方法可以像函数一样调用

时间:2019-04-04 14:24:16

标签: javascript object google-apps-script

我试图了解恶意JS脚本的作用。该脚本很模糊,因此我无法自行阅读。我知道它会创建一个 ActiveXObject 对象。

因此,我决定使用此名称声明我的对象,该名称除了输出日志外什么也不做。 病毒使用结构

var x = new ActiveXObject('file_name')

Google脚本不允许您声明自己的类(是吗?),所以我为新的AX对象声明了构造函数。一切正常,直到病毒尝试像

这样的功能访问AX对象。
var AX = new ActiveXObject()  
AX()

此返回类型不匹配(对象!=功能)。

有我的代码: https://script.google.com/d/1IrkYN_Sg0j_uiMD4fAmEPag3HLH07c1fd2t7QOQEphEg38R-t0LAPIAF/edit?usp=sharing

我注释了第195行以防止错误。

运行功能doGet进行测试并查看日志。或者只是打开https://script.google.com/macros/s/AKfycbyiYp4kX07jMwjM6B0fynfMrqQwX1ykJHfy8wFpX6Op/dev

1 个答案:

答案 0 :(得分:0)

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