var obj = new function(){}如何在JavaScript中工作?

时间:2017-03-13 14:55:32

标签: javascript function object

我有这段代码:

var obj=new function(){
  this.var=null;
  this.fun=function(funVar){
    console.log('funVar: ',funVar);
  }
  console.log('init',this);
  this.fun('fun');
};
obj.var='Something';
obj;

在控制台日志中,我有var==nullvar=='something'enter image description here

我不明白发生了什么。

我希望做obj;这样的事情来启动对象。我知道如何做obj={init:function(){}}然后使用obj.init(),我只是在尝试,现在我很好奇。

1 个答案:

答案 0 :(得分:0)

简而言之:

  1. 函数是JavaScript中的第一类值,就像对象,数组等一样。因此,您可以编写var foo = function(){};来创建一个新的函数值,并在该函数中放置对该值的引用。变量foo。与任何函数一样,必须在引用后添加括号以调用函数

    var a = function(){ console.log('hi') };
    var b = function(){ console.log('bye') };
    var c = a;
    a;   // does nothing useful. similar to `42;` or `true;` as a statement
    a(); // "hi"
    c(); // "hi"
    b(); // "bye"
    
    console.log(typeof a); // "function"
    
    console.log(a==b); // false
    console.log(a==c); // true
    
    b = a;
    b(); // "hi"
    console.log(a==b); // true
    
  2. 函数值可以在其上放置自定义属性,例如JavaScript对象。例如:

    function bar(){
      // arguments.callee gives the function value being called
      arguments.callee.callCount++; 
    }
    bar.callCount=0; // I just made up a new property!
    bar();
    bar();
    bar();
    console.log( bar.callCount ) // 3
    
  3. 当您使用new关键字在JavaScript中将函数用作构造函数时,运行时(1)会分配一个新对象,(2)运行该函数这个新对象作为this范围,(3)返回该新对象(不是返回的函数)。

    所以:var x = new bar();创建一个新的空对象,用该bar范围作为this范围调用x函数,然后将该对象的引用放入变量{{1 }}。请注意,此新对象与函数值不同。您可以在不同的对象上使用具有相同名称但值不同的属性:

    function jim(){
      this.jam = "my jam";
    }
    jim.jam = "shared jam"; // a custom property on the function
    
    var jm1 = new jim();
    var jm2 = new jim();
    console.log(jm1.jam); // my jam
    console.log(jm2.jam); // my jam
    console.log(jim.jam); // shared jam
    
    jm2.jam = "special jam";
    console.log(jm1.jam); // my jam
    console.log(jm2.jam); // special jam
    console.log(jim.jam); // shared jam