作者:狐狸家的鱼

本文链接:面向对象编程

GitHub:sueRimn

面向对象编程(OPP)

具有灵活、代码可复用、高度模块化等特点,易维护和开发

实例对象与new命令

1.对象

  • 对象是单个实物的抽象
  • 对象是一个容器,封装了属性(prototype)和方法(method)
    • 属性是对象的状态
    • 方法是对象的行为

2.构造函数

JavaScript使用构造函数作为对象的模板,描述实例对象的基本结构

定义

  • 专门用来生成实例对象的函数
  • 第一个字母通常大写

特点

  • 函数体内部使用了this关键字,代表所要生成的对象实例
  • 生成对象的时候,必须使用new命令

3.new命令

基本用法

  • new命令的作用就是执行构造函数,返回一个实例对象

  • 根据需要,构造函数也可以接受参数 原理

  • 使用new命令时,它后面的函数依次执行下面的步骤

    • 1.创建一个空对象,作为将要返回的对象实例
    • 2.将这个空对象的原型,指向构造函数的prototype属性
    • 3.将这个空对象赋值给函数内部的this关键字
    • 4.开始执行构造函数内部的代码
  • 构造函数内部,this指的是一个新生成的空对象 new.target

    如果当前函数是new命令调用,new.target指向当前函数,否则为undefined

4.this关键字

涵义

  • 可以用在构造函数中,表示实例对象
  • 它总是返回一个对象
  • this就是属性或方法“当前”所在的对象
  • 由于对象的属性可以赋给另一个对象,所以属性所在的当前对象是可变的,即this的指向是可变的

使用场合

  • 全局环境:this指的就是顶层对象window
  • 构造函数:this指的是实例对象
  • 对象的方法:this指的就是方法运行时所在的对象

使用注意点

  • 避免多层this

    • 解决方法:使用一个固定this的值,然后内层函数调用这个变量 var that = this
  • 避免数组处理方法中的this
    • 数组的mapforEach方法,运行提供一个函数作为参数。这个函数内部不应该使用this
    • 解决方法
      • 1.var that = this
      • 2.将this当作forEach方法的第二个参数,固定它的运行环境
  • 避免回调函数中的this

绑定this的方法

  • Function.prototype.call()

    • 可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域内,调用该函数
    • call方法的参数,应该是一个对象。如果参数为空、nullundefined,则默认传入全局对象
    • call方法可以接受多个参数。第一个参数就是this所要指向的那个对象,后面的参数则是函数调用时所需的参数
  • Function.prototype.apply()
    • 它与call的唯一区别就是,它接收一个数组作为函数执行时的参数
    • apply方法的第一个参数也是this所要指向的那个对象,如果设为nullundefined,则等同于指定全局对象
    • 第二个参数则是一个数组,该数组的所有成员依次作为参数,传入原函数
    • 原函数的参数,在call方法中必须一个个添加,但是在apply方法中,必须以数组形式添加
    • 应用
      • 1.找出数组的最大元素:结合使用apply方法和Math.max方法
      • 2.将数组的空元素变为undefined
      • 3.转换类似数组的对象:利用数组对象的slice方法,可以将一个类似数组的对象(比如arguments对象)转为真正的数组
      • 4.绑定回调函数的对象
  • Function.prototype.bind()
    • 用于将函数体内的this绑定到某个对象,然后返回一个新函数
    • 使用注意点
      • 1.每一次返回一个新函数
      • 2.结合回调函数使用
      • 3.结合call方法使用

5.对象的继承

原型对象

构造函数的缺点是同一个构造函数的多个实例之间,无法共享属性,从而造成对系统资源的浪费。解决方法:使用prototype

prototype属性的作用就是:JavaScript 继承机制的设计思想就是,原型对象的所有属性和方法,都能被实例对象共享原型对象的作用就是定义所有实例对象共享的属性和方法

原型链

由于原型对象也是对象,所以它也有自己的原型,对象到原型,再到原型的原型……

  • 所有对象都继承了Object.prototype的属性
  • Object.prototype的原型是null,原型链的尽头就是null
  • Object.getPrototypeOf方法返回参数对象的原型

constructor属性

prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数,可以被所有实例对象继承

面向对象编程(OPP)的更多相关文章

  1. 面向过程编程(OPP) 和面向对象编程(OOP)的关系

    面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...

  2. python之面向对象编程

    1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...

  3. python【第六篇】面向对象编程

    面向对象编程 一.编程范式:编程的方法论.程序员编程的“套路”及“特点”特点总结,抽象成方法.规范. 二.面向对象编程介绍: 1.描述 世界万物,皆可分类:世间万物,皆为对象:只要是对象,就肯定属于某 ...

  4. C#入门经典第八章面向对象编程简介-1

    面向对象编程(Object-Oriented Programming,OOP)技术 本章中的OPP实际上是.NET OOP,这里讲的一些技术不能应用于其他OOP环境.

  5. Python 面向对象编程详解

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  6. Go语言基础之面向对象编程中

    1 Golang面向对象编程基本介绍 Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OPP语言不一样,随后分别介绍Golang对面向对象编程的三大特性是如何实现的. 2 ...

  7. 面向对象编程基础(java)

    面向对象编程基础 1.1 面向对象概述 在程序开发初期,大家使用的是结构化开发语言,也就是面向过程(opp),但随着市场需求剧增,软件的规模也越来越大,结构化语言的弊端也暴露出来. 开发周期无休止的拖 ...

  8. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  9. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

随机推荐

  1. .NET Framework VS .NET Core

    本文对应的原文来至 c-sharpcorner 的一篇文章,文末有链接.如有错误,还请指正. 前言 你会为你的下一个应用程序选择哪一种开发平台 - .NET Framework 或者 .NET Cor ...

  2. 你应该学会的Python多版本管理工具Pyenv

    目录 Pyenv 简介 安装pyenv 通过pyenv安装python各种发行版 pyenv命令 多版本Python的管理 Pyenv常见问题Wiki Pyenv 简介 首先,该工具是在类linux环 ...

  3. transform旋转,平移,缩放,扭曲 斜切

    transform  改变rotate 旋转translate  位移scale 缩放 skew  斜切变形 记得兼容性:-webkit-   -moz-    -ms-     -o- transf ...

  4. 学习笔记—MySQL基础

    数据库的介绍 mysql数据库介绍 开放源码的轻量级关系型数据库管理系统,体积小.速度快.操作便捷. 数据库的启动和连接 mysql数据库启动 在终端输入以下命令,启动mysql服务器 service ...

  5. python 练习 后台返回当前时间

    新建一个 current_time.html 文件, !cur_time! 用来替换 <!DOCTYPE html> <html lang="en"> &l ...

  6. Flask技术问题汇总

    1:Flask 使用 request对象代理了当前请求的上下文.这么做什么好处和坏处? 好处:flask封装了C端发起request对象,这样就可以使用上下文临时把某些对象变为全局可访问:如果不封装, ...

  7. jQuery字母大小写转换函数

    toLowerCase() ------ 将字符串中的所有字符都转换成小写: toUpperCase() ------ 将字符串中的所有字符都转换成大写:

  8. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误(转)

    L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误   错误描述:“ L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误” 只有这个没有错误码. ...

  9. JavaScript match()方法和正则表达式match()

    先介绍参数为普通字符串的使用方式,此时match方法的返回值是存放首次匹配内容的数组.如果没有找到匹配结果,返回null.语法结构: 1 str.match(searchvalue)参数解析:(1). ...

  10. js实现搜索记录列表

    <div class="sy_div28"> <div class="sy_div23"> <span>搜索历史</s ...