美文网首页
Days05 JS高级-对象,原型

Days05 JS高级-对象,原型

作者: biu丶biubiu | 来源:发表于2018-08-05 20:58 被阅读0次

1.前言

我这人有个缺点,非要逼自己一把才行,很容易受到情绪的影响,明天和老爸一起起床,不能睡太多,鲁迅说过:人这一辈子睡多少觉,吃多少饭是有个顶点的,谁先睡完吃完谁先走。

昨天说的计划做项目,结果早上起床想把昨天晚上想的,通过工具给css添加兼容前缀,搞了半天,用autoprefixer和webpack没搞定,编辑器总是显示编译成功结果没效果。webpack明明npm install webpack -g全局安装了,编译显示webpack不是内部命令。后来想想,不能事件都花在这了,问题先留着,后面项目碰到了再说,然后就开始继续看JS高级教程,之前看的面试题,关于创建对象和原型的问题,今天算了搞懂了大部分。

2.值类型与引用类型的差别

基本类型在内存中占据固定大小的空间,因此被保存在栈内存

从一个变量向另一个变量复制基本类型的值,复制的是值的副本

引用类型的值是对象,保存在堆内存

包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针

从一个变量向另一个变量复制引用类型的值的时候,复制是引用指针,因此两个变量最终都指向同一个对象

类型检测方式:typeof, instanceof( true or false)

3.面向对象(面试可吹)

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

面向对象编程 —— Object Oriented Programming,简称 OOP ,是一种编程开发思想。

面向对象程序开发思想中,每一个对象都是功能中心,具有明确分工,可以完成接受信息、处理数据、发出信息等任务。因此,面向对象编程具有灵活、代码可复用、高度模块化等特点,容易维护和开发,比起由一系列函数或指令组成的传统的过程式编程(procedural programming),更适合多人合作的大型软件项目。

面向对象的特性

封装性:对象共有的属性,封装起来便于使用

继承性:构造函数可以有继承的,是基于原型

[多态性]:同一种行为,针对不同的对象,产生不同的结果。

面向对象的设计思想是:

抽象出 Class

根据 Class 创建 Instance

指挥 Instance 得结果

4.创建对象

对象:具体特指的某个事物,有特征(属性)和行为(方法)

    * 1. 调用系统Object()----->创建出来的对象都是Object类型的,不能很明确的指出这个对象是属于什么类型

new object方式

    * 2. 字面量的方式{}----->只能创建一个对象(一次只能创建一个)

字面量方式

    * 3.工厂模式创建对象----->----->推论---->自定义构造函数的方式

工厂模式

    *  自定义构造函数(优化后的工厂模式)

自定义构造函数

    *  自定义构造函数创建对象:4件事

    *  1.在内存中申请一块空闲的空间,存储创建的对象

    *  2.this就是当前实例化的对象

    *  3.设置对象中的属性和方法(为对象添加属性和方法,为属性和方法赋值)

    *  4.把创建后的对象返回

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

* 1. 实例对象是通过构造函数来创建的---创建的过程叫实例化    

* 2.如何判断对象是不是这个数据类型?    

   *  1) 通过构造器的方式 实例对象.构造器==构造函数名字   

   *  2) 对象 instanceof 构造函数名字

解析构造函数的过程

构造函数

构造函数的问题

使用构造函数带来的最大的好处就是创建对象更方便了,但是本身也存在一个浪费内存问题

使用原型prototype完美解决

5.原型

构造函数,实例,原型三者之间的关系

什么是原型?

    * 构造函数中有一个属性prototype,是原型,程序员使用的

    * 实例对象中有一个属性__proto__,是原型,浏览器使用的,不是很标准的,

    * 实例对象中的__proto__指向的就是该实例对象中的构造函数中的prototype

    * 构造函数中的prototype里面的属性或者方法,可以直接通过实例对象调用

    * 正常的写法:实例对象.__proto__才能访问到构造函数中的prototype中的属性或者方法

    * 原型就是属性,而这个属性也是一个对象

    * Person.prototype.属性或者Person.ptototype.方法()

原型的作用之一:数据共享,节省内存空间

    * 原型的写法:

    * 构造函数.prototype.属性=值

    * 构造函数.prototype.方法=值---->函数.prototype,函数也是对象,所以,里面也有__proto__

    * 简单的原型的写法

    * 构造函数.prototype={

    * 切记:如果这这种写法,要把构造器加上 };

属性成员的搜索原则:原型链

先在自己身上找,找到即返回

自己身上找不到,则沿着原型链向上查找,找到即返回

如果一直到原型链的末端还没有找到,则返回 undefined

原型共享数据

属性需要共享,方法也需要共享,不需要共享的数据写在构造函数中,需要共享的数据写在原型中

原型中的方法可以相互调用

通过原型给字符串添加倒序的方法

通过原型给字符串添加倒序的方法

局部变量转换为全局变量

局部变量转换为全局变量

6.贪吃蛇案例

看的有点懵逼了,以后用到再说把。赶时间。

7.后记

培养面向对象的思想,万物皆对象,看到什么东西都可以想它的特征和行为,然后构造函数,写属性和方法。面向对象编程,面向对象编程,面向对象编程。

明天早上6点开始,继承和正则表达式。jQuery初步入门,写完这个看面试题去了。

相关文章

  • Days05 JS高级-对象,原型

    1.前言 我这人有个缺点,非要逼自己一把才行,很容易受到情绪的影响,明天和老爸一起起床,不能睡太多,鲁迅说过:人这...

  • JS高级

    JS高级 原型 函数高级 对象高级 本地存储 cookie localStorage sessionStorage...

  • Javascript面向对象之组件

    高级面向对象 包装对象(13) js基于原型的程序 String Number Boolean 原型链(14) 实...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • 原型和原型链的简单理解

    原型 在JS中原型就是prototype对象,用来表示类型之间的关系。 原型链 JS中对象和对象之间是有联系的,通...

  • Js面向对象

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

  • 2022前端高频面试题

    JS相关 1.原型和原型链是什么 原型和原型链都是来源于对象而服务于对象的概念js中引用类型都是对象,对象就是属性...

  • js基础(三)

    js基础 原型链和原型对象 ... ... js没有继承原型对象prototype通常用来添加公共的属性或行为且只...

  • 发现•分享—2019-01-17

    文章 JS JS 异步编程六种方案 JS基础—原型对象的那些事(一) JS基础—原型对象的那些事(二) CSS 综...

  • JS基础

    JS基础 JS运算 JS代码块 JS对象 原型对象 GC 正则表达式

网友评论

      本文标题:Days05 JS高级-对象,原型

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