美文网首页JavaScript
面向对象&原型&原型链&继承

面向对象&原型&原型链&继承

作者: 花朵_c8cd | 来源:发表于2020-08-17 17:43 被阅读0次

面向对象

  • 面向对象的基本特征
    1.继承
    2.封装
    3.多态
  • 创建对象的方法
    1.基本方法

缺点:每创建一个方法都要把这些代码重复一遍,对象属性发生改变会影响到所有的对象,不利于维护

let player = new Object()
player.name = 'cyt'
player.start = function() {
    console.log('say hello')
}

2.工厂模式

缺点:工厂模式、 基本方法都⽆法识别对象类型,⽐如 Player 的类型只是 Object

function createFn() {
    let player = new Object()
    player.name = 'cyt'
    player.start = function() {
        console.log('say hello')
    }
    return palyer
}

3.构造函数

缺点:通过this添加的属性和方法都是指向该对象的,但是每实例化一个对象,属性和方法都会在内存中复制一份,造成内存浪费
优点:更改一个对象的属性,其他对象不受影响

function player() {
    this.name = 'cyt'
    this.start = function() {
        console.log(name + 'say hello')
    }
}
let p1 = new player()

4.原型

缺点:更改一个对象属性,其他的实例化对象都会受影响
优点:通过原型继承的方法并不是自身的,这样只会在内存中创建一份,实例化的对象都会指向这个prototype

function player() {
    this.name = 'cyt'
}
player.prototype.start = function() {
    console.log(name + 'say hello')
}
let p1 = new player()
  • 列New 关键字做了什么
    1.构造函数通过new创建了对象
    2.这个对象的proto === 这个构造函数的prototype
    3.将this指向这个新创建的对象
    4.返回一个新对象

    • 4.1如果构造函数中没有显式返回值,则返回this
    • 4.2如果构造函数中有显式返回值,是基本类型(number,string,boolean...)那么返回的还是this
    • 4.3如果构造函数中有显式返回,返回的是object型,则返回这个对象
  • 如何实现一个new

// 如何手动实现一个new
function player(name) {
    this.name = name
}
let p1 = new player('cyt')  // 通过new实现的
let p2 = mockFn(player, 'cyt')  // new的模拟函数

function mockFn() {
    // 可以隐式接收参数 arguments = [player, 'cyt']
    let o = new Object() // 创建一个实例对象
    let functionConstructor = [].shift.call(arguments) // 把player推出,arguments = ['cyt']
    o.__proto__ = functionConstructor.prototype // 实例的__proto === 构造函数的prototype
    let resultObject = functionConstructor.apply(o, arguments)  // this指向新创建的对象o
    return resultObject === 'object' ? resultObject : o
}
console.log(p1) // player { name: 'cyt' }
console.log(p2) // player { name: 'cyt' }

原型

原型链

继承

相关文章

  • lesson 5 面向对象及原型链 2021-04-29

    课程标题 面向对象及原型链 课程目标 面向对象思想 原型及原型链 继承 知识点 面向对象思想 原型链的指向 new...

  • JS汇总---面向对象&数组

    面向对象 js原型链的继承 静态属性怎么继承 js原型链以及特点 面向对象有哪几个特点 封装,继承,多态 对象的继...

  • Javascript继承的原理

    JavaScript的继承是通过原型链继承,与传统面向对象的继承方式不同。 prototype与原型 我们从头开始...

  • 面向对象(三)

    内容承接 面向对象(二) 继承 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

  • JavaScript之面向对象编程

    五、面向对象编程 目录:面向对象原型继承、面向对象class继承(ES6引入的) 1.面向对象原型继承 类:模板 ...

  • js 继承

    4种继承方式 原型式继承给原型对象添加属性原型替换子类的原型对象替换为父类的原型对象 原型链继承 借用构造函数继承...

  • Js面向对象

    一、Js面向对象 二、Js原型及原型链 1、原型 JavaScript 的每个对象都继承另一个父级对象,父级对象称...

  • 面向对象&原型&原型链&继承

    面向对象 面向对象的基本特征1.继承2.封装3.多态 创建对象的方法1.基本方法 缺点:每创建一个方法都要把这些代...

  • 面向对象,原型/原型链/继承

    一、设计模式 工厂模式 优点:解决了创建多个类似对象的问题缺点:不知道创建的对象的类型 构造函数模式 Object...

网友评论

    本文标题:面向对象&原型&原型链&继承

    本文链接:https://www.haomeiwen.com/subject/cvmfjktx.html