js创建对象的6种方式

一、工厂模式

function createStudent(name,age){
    var o=new Object();
    o.name=name;
    o.age=age;
    o.myName=function(){
        alert(this.name);
    };
    return o;
}
var student1_ = createStudent('aaa',15);
var student2_ = createStudent('bbb',18);

//问题: 工厂模式没有解决对象识别的问题,不能确定一个对象的类型

二、构造函数模式

function Student(name,age){
    this.name=name;
    this.age=age;
    this.myName=function(){
        alert(this.name);
    };
}
var student1_ = new Student('aaa',15);
var student2_ = new Student('bbb',18);

//new 关键字的作用
//1.创建一个对象
//2.将构造函数的作用域赋给新对象,this指向了新对象
//3.执行构造函数中的代码,为新对象添加熟悉
//4.返回新对象
//问题: 每个方法都要在每个实例上重新创建一遍

三、构造函数模式+原型模式

function Student(name,age){
    this.name=name;
    this.age=age;
}
Student.prototype.myName = function(){
    alert(this.name);                    
};    

var student1_ = new Student('aaa',15);
var student2_ = new Student('bbb',18);
student1__.myName();

四、动态原型模式

function Student(name,age){
    this.name=name;
    this.age=age;
    if(typeof this.myName!="function"){//第一次进入
        Student.prototype.myName = function(){
            alert(this.name);                    
        };                    
    }
}
var student1_ = new Student('aaa',15);
student1_.myName();

五、寄生构造函数模式

function Student(name,age){
    var o = new Object();
    o.name=name;
    o.age=age;
    o.myName=function(){
        alert(this.name);
    };                    
    return o;
}
var student1_ = new Student('aaa',15);
student1_.myName();
//这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象。

六、稳妥构造函数模式

function Student(name,age){
    var o = new Object();
    var name=name;
    var age=age;
    o.myName=function(){
        alert(name);
    };
    return o; 
}
var student1_ = new Student('aaa',15);
student1_.myName();
//没有公共属性,而且其他方法也不用引用this的对象
原文地址:https://www.cnblogs.com/naokr/p/5209266.html