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

var obj=new function(){}在JavaScript中如何工作?,javascript,function,object,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==null和var==something': 我不明白发生了什么事 我希望做一些

我有以下代码:

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==null
var==something'

我不明白发生了什么事

我希望做一些类似于
obj以启动对象。我知道如何做obj={init:function()

  • 函数是JavaScript中的一级值,就像对象、数组等一样。因此,您可以编写
    var foo=function(){}
    将创建一个新函数值,并在变量
    foo
    中放置对该值的引用。与任何函数一样,必须在引用后加括号才能调用函数:

    var a=function(){console.log('hi')};
    var b=function(){console.log('bye')};
    var c=a;
    a、 //没有什么有用的。类似于'42;'或者“真的”作为声明
    a();//“嗨”
    c();//“嗨”
    b();//“再见”
    console.log(a型);//“功能”
    console.log(a==b);//错误的
    console.log(a==c);//符合事实的
    b=a;
    b();//“嗨”
    console.log(a==b);//符合事实的
    
  • 函数值可以具有自定义属性,如JavaScript对象。例如:

    功能条(){
    //arguments.callee提供被调用的函数值
    arguments.callee.callCount++;
    }
    bar.callCount=0;//我刚买了一套新房子!
    bar();
    bar();
    bar();
    console.log(bar.callCount)//3
    
  • 当您使用
    new
    关键字在JavaScript中将函数用作构造函数时,运行时(1)分配一个新对象,(2)使用此新对象作为
    this
    范围运行函数,以及(3)返回该新对象(而不是函数返回的任何对象)

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

    函数jim(){ this.jam=“我的果酱”; } jim.jam=“共享的jam”//函数的自定义属性 var jm1=新的jim(); var jm2=新的jim(); console.log(jm1.jam);//我的果酱 console.log(jm2.jam);//我的果酱 console.log(jim.jam);//共享阻塞 jm2.jam=“特殊jam”; console.log(jm1.jam);//我的果酱 console.log(jm2.jam);//特殊果酱 console.log(jim.jam);//共享阻塞

  • obj本身不能启动任何东西,因为它只是一个对象,而不是函数调用<代码>新函数(){}从匿名函数构造对象。这就像
    newsomeconstructor()
    或等效的
    新构造函数var xxx=function(){…}
    ;有人回答后删除它,说的是关于
    var
    的范围,实际上有两个
    var
    变量
    obj.var='something'
    和函数中的一个。我不确定你的问题是什么。