一、两者区别在于:
1、调用方式不一样
//构造函数也是一个普通函数,创建方式和普通函数一样。
function Foo(){}
Foo();//普通函数调用方式
var f = new Foo();//构造函数调用方式
复制代码
- 普通函数调用方式:直接调用person();
- 构造函数调用方式:需要使用new关键字来调用 new person();
2、作用也不一样(构造函数用来新建实例对象)
3、首字母大小写习惯
- 一般构造函数的函数名称会用大写
- 普通函数用小写
4、函数中this的指向不同
- 普通函数中的this,在严格模式下指向undefined,非严格模式下指向window对象。
function foo(){
console.log(this===window);
}
foo();
//代码运行结果:true
复制代码
- 构造函数的this则是指向它创建的对象实例。
function Foo(){
this.name = "令狐冲";
}
var f = new Foo();
console.log(f.name);
//代码运行结果:令狐冲
//补充:构造函数的函数名和类名相同:Foo()这个构造函数,Foo是函数名,也是这个对象的类名。
复制代码
5、写法的不同
构造函数:
function Person(name){
this.name = name;
}
var p = new Person('John');//使用new关键字,不使用return
复制代码
普通函数:
function person(name){
var obj = new Object();
obj.name = name;
return obj;//使用return
}
var p = person('john');
复制代码
function person(name){
this.name = name;
return this;//使用return
}
var p = person('john'),
复制代码