稳扎稳打JavaScript(三)——创建对象的几种方式

这里写图片描述

有了前面两篇文章的基础后,我们来谈一谈在JS中创建对象的几种方式。
建议大家先预习下先前的两篇博客:
稳扎稳打JavaScript(一)——作用域链
稳扎稳打JavaScript(二)——图解对象内存模型

在JS中,创建对象的方式有很多,而且各有千秋,我们需要根据实际的业务需求选择不同的方式。

1. 工厂模式

这是创建对象最为简单的方式。

1.1. 定义方式

工厂模式的思想是:将对象构建的过程封装在一个函数中。这个函数能创建一个对象,并为他进行初始化赋值,最后返回这个对象。若要新建对象,调用这个工厂函数即可。

// 工厂函数
function createPerson ( name, age ) {
   
    var object = new Object();
    object.name = name;
    object.age = age;
    object.getName = function(){
   
        return object.name;
    }
    return object;
}

1.2. 对象创建方式

// 创建对象
Person perosn = createPerson("柴毛毛", 18);

1.3. 优点

这种模式唯一的优点就是逻辑简单。

1.4. 缺点

  • 创建的对象都是Object类型,没办法知道它的确切类型。
  • 对象中所有的函数都需要重复定义,浪费内存。
  • 没办法创建该类型的公共属性。

2. 构造函数模式

2.1. 定义方式

function Person( name, age ) {
   
    this.name = name;
    this.age = age;
    this.getName = function(){
    
        return this.name;
    };
}
  • 这种模式需要创建一个构造函数;
  • 构造函数首字母必须大写,这已经成为不成文的规定,目的是为了提高代码的可读性,只要一看到大写的函数那就说明这是一个构造函数;
  • 构造函数中,this就代表即将创建的那个对象;
  • 对象的属性直接绑在this上;
  • 若构造函数中存在闭包,那么闭包中的this仍然指向即将创建的这个对象。

2.2. 对象创建方式

通过new来创建对象:

var person = new Person("柴毛毛",18);
  • JS中的new关键词是专门用来创建对象的,不要以为它多么高级,其实通过new创建对象的过程本质上只是执行了这个构造函数,不过比执行普通函数多加了几个步骤:
    • 在函数执行前创建一个对象,并将函数的this指向这个对象;
    • 然后正常执行函数代码;
    • 最后自动返回这个对象;

2.3. 构造函数模式创建对象的过程

2.3.1. 当外层函数执行结束后:

当构造函数所在的外层函数执行结束后,JS引擎就会为这个构造函数创建两样东西:

  1. 创建一个构造函数本身的函数对象(暂且叫他A)
  2. 创建构造函数的原型对象(暂且叫他B)
    原型对象B中只有一个constructor属性,指向构造函数对象A;A对象中有一个prototype属性,指向对象B。

这个过程结束后,内存中会产生两个与构造函数相关的对象,分别是构造函数对象 和 构造函数的原型对象,他们之间通过属性constructor和

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值