js中8种创建对象的方式

对象的定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”

 

1.创建单个对象(对象字面量,构造函数):

<script type="text/javascript">
    //通过创建phone实例为例子
    //构造函数创建单个对象
        // var phone=new Object();
        // phone.color='black';
        // phone.size=24;
        // phone.getColor=function(){
        //     console.log(this.color);
        // }
    //对象字面量创建单个对象
        var phone={
            //属性
            color:'black',
            size:24,
            //方法
            getColor:function () {
                console.log(this.color);
            }
        }
    //测试
    console.log(phone)
</script>

测试结果为:

2.工厂模式创建多个对象

利:可以创建多个相似对象

弊:所有创建的对象的类型都为Object类型

<script type="text/javascript">
    //工厂模式
        function createPhone(color,size){
            //创建一个Object对象
            var o=new Object();
            //将传入的值赋给这个对象的属性
            o.color=color;
            o.size=size;

            o.getColor=function(){
                console.log(this.color);
            }
            //返回这个对象
            return o;
        }
    //测试
        var phone1=createPhone('black',8);
        var phone2=createPhone('blue',5);
        console.log(phone1,phone2)
</script>

3.构造函数模式创建多个对象

利:自定义构造函数可以将实例构造成一种特定的类型

弊:每创建一个实例,都要创建一个getColor方法

<script type="text/javascript">
    //构造函数模式
        function Phone(color,size){
            this.color=color;
            this.size=size;

            this.getColor=function(){
                console.log(this.color);
            }
        }
        //1.创建一个新对象
        //2.将构造函数的作用域赋给新对象(this指向这个新对象)
        //3.执行构造函数中的代码
        //4.返回新对象
        var phone1=new Phone('black',4);
        var phone2=new Phone('blue',5);
</script>

 

4.原型模式创建多个对象

利:可以让所有对象的实例都共享它所包含的属性和方法

弊:所有实例取得的属性值都是一样的,原型对象对所有实例一视同仁,开放共享

<script type="text/javascript">
    //原型模式
        // function Phone(){};
        // Phone.prototype.color='black';
        // Phone.prototype.size=5;
        // Phone.prototype.getColor=function(){
        //     console.log(this.color);
        // }
        // var phone1=new Phone();
        // console.log(phone1);
    //也可以使用对象字面量写
        function Phone(){}
         Phone.prototype={
            color:'black',
            size:5,

            getColor:function(){
                console.log(this.color)
            }
        }
        var phone1=new Phone();
        console.log(phone1)
</script>

 

5.组合使用构造函数和原型模式创建多个对象

<script type="text/javascript">
    //组合使用构造函数模式和原型模式
        function Phone(color,size){
            this.color=color;
            this.size=size;
        }
        Phone.prototype={
            constructor:Phone,
            getColor:function(){
                console.log(this.color)
            }
        }
        var phone1=new Phone('black',2);
        var phone2=new Phone('blue',5);
        phone1.color='golden';
        console.log(phone1);
        console.log(phone2);

</script>

 

6.动态原型模式创建多个对象

<script type="text/javascript">
    //动态原型模式
        function Phone(color,size){
            this.color=color;
            this.size=size;
            //初次调用构造函数时才会执行下面的代码
            if(typeof this.getColor!='function'){
                //不能使用对象字面量方式创建
                Phone.prototype.getColor=function(){
                    console.log(this.color);
                }
            }
        }
        var phone1=new Phone('black',3);
        console.log(phone1);
        phone1.getColor();
</script>

 

7.寄生构造函数模式创建多个对象

<script type="text/javascript">
    //寄生构造函数模式
        function Phone(color,size){
            var o=new Object();
            o.color=color;
            o.size=size;
            o.getColor=function(){
                console.log(this.color)
            }

            return o;
        }
        var phone1=new Phone('black',3);
        console.log(phone1)
</script>

8.稳妥构造函数模式创建多个对象

<script type="text/javascript">
    //稳妥构造函数模式(稳妥对象是指没有公共属性)
        function Phone(color,size){
            var o=new Object();
            //定义私有变量
            var name='huaiwei';
            //定义私有函数
            var getName=function(){
                console.log(name);
            }

            o.getColor=function(){
                console.log(color);
            }
            return o;
        }
        var phone1=Phone('black',3);
        phone1.getColor();
</script>

 

posted @ 2018-03-24 23:44  mingL  阅读(366)  评论(0编辑  收藏  举报