构造函数
- 1、构造函数要通过new来调用 this指向实例化对象
- 2、约定俗成构造函数首字母大写
function Person(name){
this.name = name;
this.age = 20;
this.hobby = function(){
console.log("喜欢美女");
}
}
// new 实例化
let zhangsan = new Person("小陈");
console.log(zhangsan);
- 3、静态属性及方法
静态属性和方法,属于类本身的
//静态成员
Person.num = 0; //静态属性
Person.fn = function(){ //静态方法
console.log("fn");
}
Person.num++;
console.log(Person.num)
- 4、构造函数性能
对象属性和方法比较,不仅值要一样想,内存也要一样。多个实例化对象,就会消耗内存
let zhangsan = new Person("小陈");
//hobby方法 开辟了新地址
let lisi = new Person("小王");
console.log(zhangsan.hobby === lisi.hobby); // false
- 5、性能解决方法
解决消耗内存的问题,js提供了一个公共空间:原型。
function Person(name){
this.name = name;
this.age = 20;
//实例化时在内存中开辟新的空间
// this.hobby = function(){
// console.log("喜欢美女");
// }
}
//功能空间原型
Person.prototype.hobby = function(){
console.log("喜欢美女");
}
// 这样可以追加n个共有方法,m个实例化对象也不消耗内存
Person.prototype.fn = function(){
console.log("fn");
}
工厂模式对比构造函数
-
1.工厂模式没有解决对象识别的问题。即创建的所有实例都是Object类型。(不清楚是哪个对象的实例)
-
2.工厂模式没有原型,占用内存