JavaScript面向对象编程-简介

本文介绍了面向对象编程的概念,重点阐述了JavaScript中的继承、封装和多态三大特性,通过实例演示了如何在JavaScript中使用组合继承和闭包实现封装。
摘要由CSDN通过智能技术生成

前言

主要谈谈什么是面向对象编程,面向对象的三大特征以及Javascript中的面向对象


一、什么是面向对象编程

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式。以对象为基本单元,相关数据和函数分组到信息“孤岛”。 这些孤岛称为“对象”。支持面向对象的语言: C++、Java、Python、Javascript等。

function Person (name, age) {
    this.name = name; // 数据
    this.age = age; // 数据
}
// 函数
Person.prototype.sayName = function () {
    console.log(`My name is ${this.name}`)
}

二、三大特征

支持面向对象编程范式的语言基本都能实现继承、封装、多态三大特征。

  1.  继承

Javascript的继承并不是通过类的方式实现继承特性的。而是通过原型的方式实现的。在Javascript中基于原型继承的方法有很多种。此文只展示其中一种。

// 组合继承
function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.sayName = function () {
    console.log(`My name is ${this.name}`)
}

function Student(name, age, studentId) {
    Person.call(this, name, age)
    this.studentId = studentId;
}

Student.prototype = new Person()

Student.prototype.sayStudentId = function () {
    console.log(`My studentId is ${this.studentId}`)
}

上述代码是ES5实现继承的一种方法。ES6通过编写类的方式来实现继承。但底层还是基于原型实现的。

        2.  封装 

封装是对对象的指定属性或者方法进行限定访问权限。这样保证了模块具有较好的独立性, 易于维护。对于修改带来的副作用减少。

// 通过闭包的方式实现 私有属性和方法
function Person(firstName, lastName) {
  var _age; // 私有属性
  this.firstName = firstName;
  this.lastName = lastName;
  this.getAge = function () {
    return _age;
  };
  this.setAge = function (age) {
    _age = age;
  };
  // 私有方法
  function _getFullName() {
    return `${this.firstName}_${this.lastName}`;
  }
  console.log(_getFullName.call(this));
}

const p = new Person("Lee", "Harden");

p.setAge(30);

console.log(p.getAge());

console.log(p._getFullName()); // 报错

         3. 多态

 多态含义: 不同的对象执行相同方法名的方法,得到不同的执行结果。

function Duck() {
  this.sound = function () {
    console.log("嘎嘎嘎");
  };
}
function Cat() {
  this.sound = function () {
    console.log("喵喵喵");
  };
}

function Dog() {
  this.sound = function () {
    console.log("汪汪汪");
  };
}

function animalSound(instance) {
  if (typeof instance.sound === "function") {
    instance.sound();
  }
}

animalSound(new Duck());
animalSound(new Dog());
animalSound(new Cat());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值