JS16:面向对象编程

面向对象是一种编程范式,强调通过对象来封装数据和行为。其主要特点包括抽象、封装、继承和多态。在JavaScript中,通过prototype实现原型继承,通过class关键字实现类继承。原型链是JavaScript中查找对象属性的机制,形成一个从实例到构造函数的链式结构。
摘要由CSDN通过智能技术生成

什么是面向对象?

简单点说,就是我们不需要知道内部原理,就知道如何使用它的功能,就是面向对象。对象是一个整体,对外提供一些功能,而你不知道它内部是怎么操作的。

面向对象特点

1、抽象:指把核心的东西抽出来,把解决问题有关的东西拿出来摆在面前。比如把学生的核心信息名字和学号等信息抽出来,爱玩还是爱学习、开朗还是腼腆等不是核心的信息可以摒弃。

2、封装:让使用对象的人不考虑内部实现,只考虑使用功能。把内部代码保护起来,只留些接口供用户使用。

3、继承:为了代码的复用,从父类上继承一些属性和方法,子类也可以有自己的属性和方法。比如儿子继承父亲的姓。

4、多态:实际上是不同对象做同一操作产生不同的效果。多态的思想是把“想做什么”和“和谁做”分开,比如上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样。

面向对象原型继承

在 JavaScript 中每个函数都有一个 prototype 属性,这个属性指向函数的原型对象,原型可以理解为“父类”,默认的原型是 Object,可以通过 __proto__ 指定原型。

var student = {
    name: 'student',
    study: function() {
        console.log(this.name + " study...");
    }
}

var xiaoming = {
    name: 'xiaoming'
}

// 将 xiaoming 的原型改为 student
// 可以理解为 xiaoming 继承了父类 student 的方法
xiaoming.__proto__ = student;

执行 xiaoming.__proto__ = student; 之前:

 执行之后:

 

面向对象class继承

class 关键字是 ES6 引入的。

// 定义一个学生的类
class Student {
    constructor(name) {
        this.name = name;
    }
    hello() {
        console.log('hello:' + this.name);
    }
}

var xiaoming = new Student("xiaoming");
xiaoming.hello();

// 继承
class xiaoStudent extends Student {
    constructor(name, age) {
        super(name);
        this.age = age;
    }
    getAge() {
        console.log("我是:" + this.name + ",今年 " + this.age + " 岁");
    }
}

var xiaohong = new xiaoStudent("xiaohong", 5);
xiaohong.hello();
xiaohong.getAge();

执行结果:

输出 xiaoming 可以看到其实 class 继承的本质也是修改了原型,但是却是我们能更好理解和接收的形式。

原型链

在 JavaScript 中每个函数都有一个 prototype 属性,这个属性指向函数的原型对象,这个原型对象还可以有自己的原型对象,以此类推,形成了一个原型链。

如上面的例子,xiaohong 的原型是 Student,Student 的原型是 Object,就是一个原型链。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值