1.命名的方法不同
普通函数使用的是小驼峰命名法,而构造函数使用的是大驼峰命名法,即首字大小写的区别
function fn(){
var a =1;
}//普通函数
function Fn(){
var a =1;
}//构造函数
2.调用方式的不同
任何函数只要使用new关键字来调用,那么它就是一个构造函数
而如果不使用new关键字来调用,那么它就是一个普通函数
//普通函数
function person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayHello = function () {
console.log('你好,我叫' + this.name);
}
}
//普通函数的调用方法
person('lab', 18, '男');
window.sayHello(); //你好,我叫lab
console.log(age); //18
//构造函数
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayHello = function () {
console.log('你好,我叫' + this.name);
}
}
var p = new Person('lhm',23,'女');
p.sayHello();//你好我叫lhm
console.log(p.age);//23
3.this关键字的指向不同
普通函数和构造函数中this的指向位置不同,普通函数中this指向为window,而构造函数中this指向的是实例,也就是只想的是 自己
//普通函数
function fn(){
console.log(this);//打印结果为 Window
}
fn();
//构造函数
function Fn(){
console.log(this);//打印结果为 Fn{}
}
var f = new Fn();
4.返回结果的不同
普通函数不写return的情况下返回结果为undefined,构造函数返回结果为构造函数的内容,不会返回undefined
function fn(a,b){
this.a = a;
this.b = b;
//不写return
}
var result = fn(1,2);
console.log(result);//输出结果为undefined
//构造函数
function Fn(a,b){
this.a = a;
this.b = b;
this.sayHi = function(){
console.log(this.a);
}
//不写return
}
var f = new Fn(1,2);
console.log(f); //输出结果为Fn{a:1,b:2,sayHi:f}