js的构造函数和其他语言一样是用来初始化对象的,但是有一点不同js中任何函数都可以作为构造函数,只要用new 去调用都会生成一个新的对象.但是为了方便区别一般js中构造函数的首字母都会大写.
js中有几种不同的构造函数.
1.动态原型模式:
function Persion(){
this.name = 'lsh';
if (!this.sayName){
Persion.prototype.sayName = function (){
console.log(this.name);
【js的构造函数】 }
}
}
var p = new Persion();
p.sayName();
这种方式可以在构造函数内部检查你需要添加的原型是否存在来决定是否添加原型方法或属性
2.寄生构造函数:
function Person (){
let obj = new Object();
obj.name = 'lsh';
obj.sayName = function(){
console.log(this.name);
}
return obj;
}
var p = new Person();
p.sayName();
这种方式采用在构造函数内部生成一个新的对象,但是同时衍生了一个问题就是返回的对象跟构造函数其实是没有关系的,无法使用 instanceof 检测对象类型,所以不推荐使用.
3.稳妥构造函数:
function Person(name,age){
let obj = new Object();
this.age = age;
obj.sayName = function(){
console.log(name+age);
}
return obj;
}
var p = new Person('lsh',24);
p.sayName();
这种构造函数跟寄生构造函数有一点类似,采用在构造函数内部再生成一个对象,但是稳妥构造函数生成的对象,只能调用你暴露出来的接口,例如name 只能通过sayName函数去访问,还有age相当于一个私有属性.同时稳妥构造函数也是不能使用instanceof来检查类型的,原因同寄生构造函数一样.