JS中构造函数和普通函数有什么区别
1.调用方式的区别:
构造函数需要使用new运算符调用,如果构造函数没有参数可以省略小括号,比如new Object。
普通函数的调用不需要new运算符,而且必须要有小括号。 关于new的作用可以参阅js的new运算符的作用简单介绍一章节。
2.this的指向问题:
构造函数的this会被绑定到创建的对象实例上。
普通函数的this则属于此函数的调用者。
3.命名方式:
构造函数名称通常首字母要大些。
普通函数名称首字母要小写,使用驼峰命名方式。 构造函数
使用构造器创建对象
在 JavaScript 中,构造器其实就是一个普通的函数。当使用 new
操作符 来作用这个函数时,它就可以被称为构造方法(构造函数)。
任何函数,只要通过 new 操作符来调用,那它就可以作为构造函数 ;
任何函数,如果不通过 new 操作符来调用,那它跟普通函数也没有什么两样。
优点
与普通函数相比,构造函数有以下明显特点
1.用new关键字调用
1 | var prince=new Prince("charming",25); |
2.函数内部可以使用this
关键字
在构造函数内部,this
指向的是构造出的新对象。用this
定义的变量或函数/方法,就是实例变量或实例函数/方法。需要用实例才能访问到,不能用类型名访问。
1 | prince.age;//25 Prince.age;//undefined |
3.默认不用return返回值 构造函数是不需要用return显式返回值的,默认会返回this,也就是新的实例对象。当然,也可以用return语句,返回值会根据return值的类型而有所不同,细节将在下文介绍。
4.函数命名建议首字母大写,与普通函数区分开。 不是命名规范中的,但是建议这么写。
使用new关键字实例化的时候发生了什么?
以上文中的Prince()
函数举个栗子:
第一步,创建一个空对象。 var prince={}
第二步,将构造函数Prince()
中的this
指向新创建的对象prince
。
第三步,将prince
的_proto_
属性指向Prince
函数的prototype
,创建对象和原型间关系
第四步,执行构造函数Prince()
内的代码。
构造函数有return
值怎么办?
构造函数里没有显式调用return时
,默认是返回this对象(这个时候,必须要 使用
new关键字来调用吧),也就是新创建的实例对象。 当构造函数里调用
return`时,分两种情况:
return的是五种简单数据类型:String
,Number
,Boolean
,Null
,Undefined
。 这种情况下,忽视return
值,依然返回this
对象。
return
的是Object
这种情况下,不再返回this
对象,而是返回return
语句的返回值。
1 | function Person(name){ |