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'
和函数中的一个。我不确定你的问题是什么。