在JavaScript中,任何合法的函数都可以作为对象的构造函数,这既包括系统内置函数,也包括用户自己定义的函数。一旦函数被作为构造函数执行,它内部的this属性将引用函数本身。
通常来说,构造函数没有返回值,它们只是初始化由this指针传递进来的对象,并且什么也不返回。如果一个函数有返回值,被返回的对象就成了new表达式的值。从形式上看,一个函数被作为构造函数还是普通函数执行的唯一区别,是否用new运算符。
在JavaScript的世界里没有类的概念,JavaScript是一种基于对象的语言,它包含5中原生数据类型(number , boolean , string , null , undefined)
除此之外,其他所有的都是对象,函数也是一个对象
构造函数,就是一个普通的函数,与其他函数没有任何区别,可以理解为 函数==构造函数,它只是概念上的一个定义,使用它用来实例化对象。
function Obj() {
}
var o = new Obj(); // 实例化
使用new运算符返回的对象并不一定是实例本身,也可以在构造函数用使用return改变返回值
function Obj() {
this.a = 1;
return { a: 2 };
}
var o = new Obj(); // o并不是Obj的实例
console.log(o.a); // 输出2
在JavaScript的内置对象中,所有的函数对象都是Function构造函数的实例
构造函数和原型函数
1.构造函数在实例化时,必须使用new来操作,声明时不需要new object,隐含自身已经new了
2、构造函数可以用来解决对象实例化中数据覆盖问题,但会造成引用地址不一致问题
3、原型函数解决了引用地址不一致问题
4、但原型函数可以实现共享但不能进行重写,会将原来的信息覆盖。