Javascript面向对象编程(1)-- JS对象的创建方式与优劣势

1 篇文章 0 订阅
1 篇文章 0 订阅

Javascript面向对象编程(1)-- JS对象的创建方式与优劣势

Javascript是一门真正的面向对象语言,而不是很多人认为的没有java/C++等语言语法的就不是面向对象语言。只是Javascript面向对象的实现是基于对象实现的,秉承一切皆对象的思想。
既然Javascript的面向对象是基于对象的,那我们在这里先来探讨一下Javascript的对象模型。

  • Javascript对象创建的方法
    • 对象字面量与new Obejct()方式
          let  person1 = {
                name: 'Jack Ma',
                age: 60
          };
          //let person1  = new Object(); person1.name = 'Jack Ma'; person1.age = 60;
          let person2 = {
                name: 'Polly',
                age: 58
         } ;
          //let person2  = new Object(); person2.name = 'Jack Ma'; person2.age = 60;
      

对象字面量与new Object()是最直接的对象创建方式,上面两个对象分别代表Jack Ma、Polly 两个人,他们除了成员一致外,没有实质关系,代码无法复用,使用不太方便。所以我们总结一下字面量的缺点有一下几点:

  • 首先,虽然都是对象,但脱离的面向对象的概念,没有抽象层。

  • 第二,两个对象都是表示一个类型的实例却没办法在逻辑层面表现出来。

  • 第三,代码复用低,每一个对象都要去构建相同的属性,很麻烦。

  • 第四,没有类型名称不利于继承,对面向对象是一大障碍。

  • 函数工厂方法

  let person = function (name, age) {
      return {name: name, age: age};
  };
  let person1 = person ('Jack Ma', 60);
  let person2 = person ('Polly', 58);

此方法解决了字面量中代码的复用问题,但是对继承等面向对象的支持还是不足。

  • 使用构造函数的方式
    function Person (name, age) {
          this.age  = age;
          this.name = name;
    }
   let person1 = new Person ('Jack Ma', 60);
   let person2 = new Person('Polly', 58);

构造函数就其实就是一个普通的函数,当对构造函数使用new进行实例化时,会将其内部this的指向绑定实例对象上,下面我们来创建一个Person构造函数(构造函数约定使用大写开头,和普通函数做区分)。
构造函数首先作为一个函数,当我们直接调用时,函数内部的this指针会指向函数当前的作用域。在一般情况下我们会将构造函数定义在全局环境中,所以这是this指向全局环境(window浏览器/global nodejs)。
当我们使用new调用构造函数实例话时,函数作用域发生改变,作用域指向了实例后的对象,所以这时this指向它的作用域时就变成了刚刚创建的实例了。所以创建完成的对象实例拥有了我们设置在this上面的所有属性。
(对象的创建就先说到这里。接下来我将总结new实例对象的过程秘辛)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值