var a= new function(){
this.a=1;
this.b=2;
this.c=3;
}
alert(a.a);//1
function b(){
this.a=1;
this.b=2;
this.c=3;
}
alert(b.a);//undefined
var c=new b();
alert(c.a);//1
var d=function(){
this.a=1;
this.b=2;
this.c=3;
}
alert(d.a);//undefined
为啥是这样的呀?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
var a= new function(){
直接使用function定义的函数是对象原型,调用它的方法会去寻找prototype上的方法,
而使用new关键字创建的是一个对象实例,在function中使用this.a赋值的是实例属性。
建议去看一下js的原型链
这是很基础的构造函数啊,你确定你有去了解过?new 的过程中发生了什么你有了解过?
a就是一个通过new生成的一个对象,所以a.a有值。而bd都是构造函数啊,b和d一个是声明式写法一个是表达式写法,基本上是一样的,只不过d这种写法不能变量提升而已。构造函数需要new去实例化成一个对象,要不然没有对象你怎么取值呢?
大致写一下new的过程
1 先写一个构造函数
function F(name,age){
}
F.prototype={
}
2 实例化一个对象
var a=new F("张三",23);
new的过程分为3步骤
第一步:var a={};//生成一个空对象
第二步:遍历F给a这个对象赋值 //此时a这个对象有了a和b这2个属性,即{name:"张三",age:23};
第三步:a._proto_=F.prototype //将a的原型链指向F这个构造函数的原型对象上去。//此时a这个对象又有了一个方法那就是getName。
最终a这个实例化的对象有了3个属性就是{name:"张三",age:23,getName:function(){return this.name}}
缺乏对于js的构造函数和普通函数的理解啊,建议看下相关的博文,一遍就好,立马了然于胸
new 会创建一个对象,这个对象的属性由构造函数决定
形如
也就是new后面的东西
这里应该是有语法错误的,但是被浏览器忽略了,更符合逻辑的应该是应该是
你可把它看作
看下这里,跟你的问题一样
关键在于new,去看下new的执行过程。