资讯专栏INFORMATION COLUMN

JS类与类继承

shixinzhang / 3282人阅读

摘要:构造类以及继承构造函数方法该种方式下的继承封装一个函数绑定复制继承对象创建方法类的实现该种方式下的继承极简主义法实现一个类睡觉睡觉类的私有属性和方法在方法中,只要不是定义在对象上的方法和属性,都是私有的该变量只能通过公有方法来读取类的数据共

构造类以及继承 构造函数方法
function Person(name) {
    this.name = name
}

Person.prototype.species = "human"
Person.prototype.sayName = {
    alert(this.name)
}

let person = new Person()

person.sayName()

该种方式下的继承

(1)封装一个函数

function extend (child, Parent) {
    let F = function(){}
    F.prototype = Parent.prototype
    child.prototype = new F()
    child.prototype.constructor = child
}
function Man (name) {this.name = name}
extend(Man, Person)
let man1 = new Man("ziv")
console.log(man1.species) // human

(2)绑定

function Man () {
    Person.call(this, arguments) // call,apply,bind
}

(3)复制继承

function Man () {}
for (let prop in Person.prototype) {
    // 
    Man.prototype[prop] = Person.prototype[prop]
}

Man.prototype.constructor = Man
对象创建方法
let Person = {
    name: "michal",
    sayName: function() {
        alert(this.name)
    }
}

let person = Object.create(Person)
person.sayName()
class类的实现
class Point {
    constructor(x, y) {
        this.x = x
        this.y = y
    }
    toString() {
        return `( ${this.x} ,${this.y} )`
    }
}

该种方式下的继承

class micPoint extends Point(x, y, z) {
    constructor() {
        super(x, y)
        this.z = z    
    }
    toString () {
        return this.z + "" + super.toString()
    }
    
}

let point = new Point(2, 3)
极简主义法

实现一个类

let Animal = {
    createNew: function() {
        let animal = {}
        animal.name = "animal"
        animal.sleep = function() {console.log("睡觉")}
        return animal
    }
}
let animal1 = Animal.createNew()
animal1.sleep() // 睡觉

类的私有属性和方法

let Cat = {
    createNew: function() {
        let cat = {}
        // 在createNew()方法中,只要不是定义在cat对象上的方法和属性,都是私有的
        let sound = "miaomiao" // 该sound变量只能通过公有方法makeSound()来读取
        cat.makeSound = function (){console.log(sound)}
        return cat
    }
}
let cat2 = Cat.createNew()
console.log(cat2.sound) // undefined

类的数据共享

let Cat = {
    sound: "喵喵"
    createNew: function(){
        let cat = {}
        cat.makeSound = function(){console.log(Cat.sound)}
        cat.changeSound = function(x){Cat.sound = x}
        return cat
    }
}
let cat1 = Cat.createNew()
let cat2 = Cat.createNew()
cat1.makeSound() // 喵喵
cat2.changeSound("汪汪") // 修改了共享的数据,另一个实例对象也会受到影响
cat1.makeSound() // 汪汪 

该种方式下的继承实现

let Cat = {
    createNew: function() {
        let cat = Animal.createNew()
        cat.name = "miao"
       
        cat.makeSound = function () {console.log("喵喵")}
        return cat
    }
}

let cat1 = Cat.createNew() // 该实例会继承Cat和Animal类
cat1.sleep() // 睡觉

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84688.html

相关文章

  • JS中的与类继承

    摘要:首先捋清楚类和对象的关系类比如人类,指的是一个范围对象比如某个人,指的是这个范围中具体的对象中的作为构造函数时,就是一个类,通过操作符,可以返回一个对象。 JS中的类与类的继承 我们知道,JS中没有类或接口的概念,即不能直接定义抽象的类,也不能直接实现继承。不过,为了编程的方便,我们可以在 JS 中模拟类和继承的行为。首先捋清楚类和对象的关系: 类:比如人类,指的是一个范围; ...

    Tangpj 评论0 收藏0
  • java学习(三) —— 面对对象

    摘要:前言是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。面对对象基本概述概述是基于面向过程的变成思想,是对面向过程的一种封装。面对对象开发就是不断的创建对象,使用对象,指挥对象做事情。面对对象设计其实就是在管理和维护对象之间的关系。 前言 java是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。 面对对象,主要包括:面向对象思想,类与对象及其使用,对象的内存图,成...

    褰辩话 评论0 收藏0
  • php面向对象详解

    摘要:前言自从进入版本以来,开始全面地支持面向对象编程。好了,进入正题,面向对象的三大特性分别是封装性,继承性以及多态性,使用面向对象开发,让我们的程序可维护以及扩展性大大提高。 showImg(https://segmentfault.com/img/remote/1460000012257579?w=1920&h=1080); 前言 自从php进入5.0版本以来,PHP开始全面地支持面向...

    xingpingz 评论0 收藏0
  • Java编程基础10——面向对象_多态&抽象类&接口

    摘要:案例演示抽象类的成员特点抽象类的成员方法特性抽象方法强制要求子类做的事情。抽象类中定义的是该继承体系的共性功能。 1.多态的概述及其成员访问特点代码体现 A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提- 1.要有继承关系 2.要有方法重写 3.要有父类引用指向子类对象。 C:多态中的成员访问特点之 成员变量:编译和运行都看父类。 成员方法:编...

    dunizb 评论0 收藏0
  • 设计模式之软件设计七大原则

    摘要:引申意义子类可以扩展父类的功能,但不能改变父类原有的功能。含义当子类的方法实现父类的方法时重写重载或实现抽象方法,方法的后置条件即方法的输出返回值要比父类更严格或相等。优点约束继承泛滥,开闭原则的一种体现。降低需求变更时引入的风险。 0x01.开闭原则 定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭 要点: 当变更发生时,不要直接修改类,而是通过继承扩展的方式完成变...

    ixlei 评论0 收藏0

发表评论

0条评论

shixinzhang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<