总结创建对象的集中方式以及优缺点分析

最近由于需要面试,自己开始整理JS知识。从最重要的创建对象开始吧。以下是自己的整理内容,在整理的过程中,自己也参考了其他大神的博客。

1.字面变量创建对象

    1)var obj = {name: 'yh'}

    优点:简单明了,适合创建当个对象

    缺点:复用性差,只适合单次或者简单使用。

  2)var obj = new Object();

    obj.name = 'yh';

    优点:简单明了,适合创建当个对象

    缺点:复用性差,只适合单次或者简单使用。

3.工厂模式创建对象

    function person(name) {

         var obj = new Object();

         o.name=name;

         return o; 

    }

   var per = person('yh');

  优点:可以复用代码

  缺点:不能确定返回对象的类型(因为它返回的对象的原型都指向Object)

  利用(per instanceOf person)输出的false可以看到

 per instanceOf Object  //true

4.构造函数模式创建对象

    function Person(name) {

        this.name=name;

        this.sayName = function () {

            console.log(this.name)

        }

    }

    var person = new Person('yh');

    优点:可以传参数,可以识别对象类型

    缺点:在多次实例化调用方法,每个方法都要被创建一次

    优化:

    function Person(name) {

        this.name = name;  

        this.sayName=sayName;

    }

    function sayName() {

        console.log("nihao");    

    }

    优点:不需要每次实例化去重新创建方法了

    缺点:如果有很多方法能?得创建多少个全局变量的函数

5.原型模式创建对象

    function person() {}

    person.prototype.name='yh';

    person.prototype.sayName=function() {

        console.log('111');

    }

    var person1 =new person();

    优点:所有的实例都继承了原型的方法和属性

    缺点:数据共享,导致原型上的应用类型数据会受到实例的干扰。

6.原型和构造的混合模式

    function Person(name.age){

        this.name=name    

}

    Person.prototype={

        constructor:Person,

        sayName:function(){

            console.log('nihao');

        }

    }

    优点:公有属性和方法都可以通过原型继承,私有的并不互相影响。

7.寄生模式。

    只是在实例化的时候添加通过new,其他的都和工厂模式一样

8.动态原型模式

    function Person(name){

        this.name=name;

        if(typeof this.sayName!='function'){

            Person.prototype.sayName = function(){

               console.log('11');             

        }}

}

 

 

继承的编写集中方式:

 

 

 

 

 

 

   

 

 

 

 

 

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值