JS面向对象、原型函数

38 阅读2分钟

面向对象思想

面向过程

  • 解决问题的过程,按步骤进行,第一步做什么,第二步做什么,一步一步完成

面向对象

  • 找具有解决问题功能的对象,调用其功能,完成任务。如果对象不存在,则创建对象。

面向对象与面向过程

  • 面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊
  • 面向对象就是找一个对象,指挥得结果
  • 面向对象将执行者转变成指挥者
  • 面向对象不是面向过程的替代,而是面向过程的封装 image.png

创建对象方式

简单方式new Object

image.png

字面量方式

image.png

工厂函数

image.png

构造函数

更优雅的工场函数-构造函数

image.png

解析构造函数代码的执行

image.png

image.png

构造函数示例

image.png

面向对象小案例: 点击按钮改变区块颜色

image.png

image.png

小知识点

image.png

原型对象prototype

  • 实例对象:new语句调用构造函数创建的对象
  • 原型对象引入
    • 每个构造函数都有一个prototype属性指向它的原型对象,Person.prototype
    • 作用: 公共的属性和方法定义在原型对象上,节省内存空间 Person.prototype.say = function(){}
    • 实例对象可以访问原型对象上公共的属性和方法
  • 原型对象、构造函数与实例对象 实例对象v都有一个隐式原型__proto__指向他的原型对象

image.png

image.png

属性和方法搜索原则

  面向对象编程思想

      1. 找解决问题对象,如果对象存在调用其功能解决问题
      2. 对象不存在,创建对象
      3. 构造函数方式创建对象

     - 构造函数: 对象私有的属性和方法定义在构造函数中
     - 原型对象: 公共的属性和方法定义在原型对象上
     
       对象成员(属性和方法)搜索原则:
       先在实例对象上找,如果找不到,沿着隐式原型__proto__到原型对象上查找

原型对象简写

function Person(name, age) {
    this.name = name
    this.age = age}
    // 原型对象
    // Person.prototype.say = function () {
    // 	console.log('说话 say')
    // }
    // Person.prototype.eat = function(){
    //     console.log('吃饭')
    // }
    // Person.prototype.type = '中国人'
    Person.prototype = {
    constructor: Person, // 手动添加constructor属性指向它的构造函数
    type: '中国人',
    say: function () {
        console.log('说话 say')
        },
    eat: function () {
        console.log('吃饭')
        },
    }
    // 实例对象
    let p1 = new Person('jack', 18)
    p1.say()
    p1.eat()
    console.dir(Person.prototype)

内置对象原型

 Object  Array Date ....      
       new Object()    Object.prototype
       new Array()     Array.prototype
       new Date()      Date.prototype



        原型方法中的this指向调用该方法的对象

案例

切换区块颜色

image.png

选项卡

image.png