美文网首页
丸子学JS(学习1小时 - 面向对象基础)

丸子学JS(学习1小时 - 面向对象基础)

作者: 丸子小姐__不懂爱 | 来源:发表于2023-11-29 10:22 被阅读0次

前言

一晃终于学到了面向对象,这一块花了好长一段时间去理解,内容不多但是需要时间去消化

对象是什么

1)对象是单个事物的抽象
2)对象是一个容器,封装了属性(property)和方法(method)

什么是面向对象

面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性。

创建对象

  • 简单方式
    1、new Object() 创建
var person = new Object()
    person.name = 'som'
    person.age = 18
    person.sayName = function() {
        console.log(this.name)
    }

2、对象字面量创建

var person = {
    name: 'som',
    age: 18,
    sayName: function(){
        console.log(this.name)
    }
}
  • 工厂函数方式
function createPerson (name, age) {
  return {
    name: name,
    age: age,
    sayName: function () {
      console.log(this.name)
    }
  }
}

优雅的工厂函数 - 构造函数

function Person (name, age) {
  this.name = name
  this.age = age
  this.sayName = function () {
    console.log(this.name)
  }
}

var p1 = new Person('Jack', 18)
p1.sayName() // => Jack

var p2 = new Person('Mike', 23)
p2.sayName() // => Mike

使用new 操作符构造函数将经历下面4个步骤

  1. 创建一个新对象
  2. 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
  3. 执行构造函数中的代码
  4. 返回新对象

构造函数和实例对象的关系

使用构造函数的好处不仅仅在于代码的简洁性,更重要的是我们可以识别对象的具体类型了。在每一个实例对象中的proto中同时有一个 constructor 属性,该属性指向创建该实例的构造函数

console.log(p1.constructor === Person) // => true
console.log(p2.constructor === Person) // => true
console.log(p1.constructor === p2.constructor) // => true

使用 instanceof 检测实例是否属于某个构造函数构建的

console.log(p1 instanceof Person) // => true
console.log(p2 instanceof Person) // => true

原型 prototype

每一个构造函数都有一个prototype属性,指向另一个对象, 这个对象的所有属性和方法都会被构造函数的实例继承

function Person (name, age) {
  this.name = name
  this.age = age
}
Person.prototype.type = 'human'

Person.prototype.sayName = function () {
  console.log(this.name)
}

var p1 = new Person(...)
var p2 = new Person(...)

console.log(p1.sayName === p2.sayName) // => true

构造函数、实例、原型之间的关系

更简单的原型写法

function Person (name, age) {
  this.name = name
  this.age = age
}

Person.prototype = {
  constructor: Person, // => 手动将 constructor 指向正确的构造函数
  type: 'human',
  sayHello: function () {
    console.log('我叫' + this.name + ',我今年' + this.age + '岁了')
  }
}

相关文章

  • 不同维度的拆分:面向对象和函数式的区别

    面向对象是什么 我们学习编程的时候,学完基础的语法就是学面向对象了吧。对于面向对象每个人都应该有一些理解,我这里讲...

  • JS面向对象精要(二)_函数

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(三)_理解对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(四)_构造函数和原型对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(五)_继承

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • js面向对象

    本文将循序渐进的介绍js面向对象的基础知识。 什么是面向对象呢? 面向对象编程 (OOP : Object Ori...

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

  • JS面向对象(基础)

    一、面向过程和面向对象的区别、联系 1.面向过程编程:注重解决问题的步骤,分析问题需要的每一步,实现函数依次调用。...

  • 2018-01-18

    js中的面向对象核心 js是基于对象的编程语言,在后面的学习中我们通过一种模式使其转化成为面向对象的语言。js面向...

  • JavaScript面向对象学习笔记

    @(JS技巧)[面向对象] JavaScript面向对象学习笔记 封装 Javascript是一种基于对象(obj...

网友评论

      本文标题:丸子学JS(学习1小时 - 面向对象基础)

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