我理解的JS继承(先放代码,随后完善)

77 阅读1分钟

每一个对象都有它的原型对象,它可以使用自己原型对象上的所有属性和方法。 获取原型的方法:

  1. 通过对象的__proto__获取
  2. 通过构造函数的prototype属性拿到原型
  3. 通过类的prototype属性

  1. 通过对象的__proto__获取
let cat = {
    name: '喵喵'
}
cat.__proto__.eat = function () {
    console.log('吃鱼')
}
cat.eat()
  1. 通过构造函数的prototype属性拿到原型
function Cat(name, age) {
    this.name = name
    this.age = age
}
let cat = new Cat('喵喵', 2)
Cat.prototype.eat = function () {
    console.log('吃鱼')
}
cat.eat()
  1. 通过类的prototype属性
ES6类的基本语法
class Cat {
    constructor(name, age) {
        this.name = name
        this.age = age
    }
}
Cat.prototype.eat = function () {
    console.log('吃鱼')
}
let cat = new Cat('喵喵', 2)
cat.eat()

原型对象有什么用?

通过扩展对象来实现输出xxxx年xx月xx日

let date = new Date()
Date()本身不具有输出年月日的能力
Date.prototype.format = function () {
    let year = this.getFullYear()
    let month = this.getMonth()
    let date = this.getDate()
    return `${year}${month}${date}日`
}
date.format()

什么是继承? 继承就是子对象可以使用父对象上的所有属性和方法

创建一个用户,创建一个管理员,管理员在继承用户的所有功能的基础上, 再新增一个删除用户的功能

ES6 实现继承

class User {
    constructor(username, password) {
        this.username = username
        this.password = password
    }
    login() {
        console.log('登陆')
    }
}
class Admin extends User {
    deletePerson() {
        console.log('删除一个人')
    }
}
let admin = new Admin()
admin.login()
admin.deletePerson()

ES5 实现继承

function User(username,password){
    this.username = username
    this.password = password
    this.login = function(){
        console.log('登陆')
    }   
}
function Admin(){
    this.deletePerson = function()
    {
        console.log('删除一个人')
    }
}
Admin.prototype = new User()
let admin = new Admin()
admin.login()
//admin --> Admin --> User --> Object
function User(username,password){
    this.username = username
    this.password = password
}
function Admin(){
    this.deletePerson = function()
    {
        console.log('删除一个人')
    }
}
Object.prototype.login =function(){
    console.log('Object原型上的登陆方法')
}
Admin.prototype = new User()
let admin = new Admin()
admin.login()