哇,看了自己最近的一篇文章,其实那时候刚接触Jest,啥也不会(虽然现在其实也一样不会,嘿嘿),就像记录下工作中遇到的一些问题,其实,后来的一些发现吧,那两篇文章写的其实是有一些问题的。希望不会给大家带来一些误导,在某些特殊的情况下,确实可以解决描述中的问题,但是实际上,并没有真正的理解问题是什么,只是表面解决罢了。

  时隔一年,最近想要提升下自己的js功底,提升下自己在更高层次的方向上的一些思路和能力,所以看了这本书。其中有些内容一方面由于我的能力较差,妈的竟然没看懂,一方面因为是翻译的,所以总觉得怪怪的。好吧,跟我之前的理由一模一样。

  当然,这很长的一段时间,虽然没写博客,但是也抄了不少东西,比如《css世界》,比如深入学习了一下vue,等等等等。再比如之前的一段时间,真的忙的不行,懒得要死。

  我工作到今天差不多刚好三年半的时间,感觉自己的水平,也不过一直在模仿,从未被超越。也不知何时(感觉整个工作生涯都没戏了)能有一点真正的自己的看法和见解。也算我没有白白的干了前端好几年。

  在正文开始之前,我想说的是,我写的内容,全都是抄的。说实话我真的没想到会有几千的阅读量,在未来和以后,也希望我自己可以写出来更细腻和认真的内容,而不是为了写而写(其实我主要是觉得自己记不住,想要看的时候这样比较方便)。

  啰嗦了这么多,那么开始真正的内容吧。

  其中所涉及到的内容包括基本技巧,比如变量提升,循环,类型转换,命名约定等。后面包括字面量,函数,对象,代码复用(继承),设计模式,DOM和浏览器模式等核心内容。并且在每一个内容下会详细介绍及细分规划。

  说实话,我看了一遍,但是觉得其中内容深厚且重要,是每一个进阶前端开发都必须学会,学懂的知识。故,有此系列博文。

  以下是真正的正文:哈哈。

  广义上的模式是指“重现事件或者对象的主题,它是一个可以用来产生其他事物的模版或者模型”。在软件开发过程中,模式是指一个通用问题的解决方案。一个模式不仅仅是一个可以用来复制粘贴的代码解决方案,更多地是提供了一个更好的实践经验、有用的抽象化表示和解决一类问题的模板。

  学习和识别模式,是非常重要的,理由如下:

    1. 通过学习模式,可以帮助我们使用经过实践证明有效的经验来编写代码,而不是去做很多无用功。

    2. 模式提供了某种程度上的抽象。大脑在一定的时间内,仅能记住一定数量的内容,因此思考更复杂的问题时,使用模式可以让您集中精力去用已有的模式来解决该问题,而不需要被一些低层次的细节所困扰。

    3. 模式,可以改善开发者和开发团队之间的交流,通常开发者是采取远程交流而不是面对面进行交流。为一些编码技术或方法贴上标签并命名,可以很方便地确保双方能够了解对方确切表达的意思。

  本系列内容,核心讨论以下三种类型的模式,即:设计模式,编码模式以及反模式。尤其要说明的是反模式。反模式并不是一个bug,或者是编码错误,它仅仅是常见的、引发的问题比解决的问题更多的一种方法。

Javascript基础概念 

  面向对象

  我们经常会聊到面向对象,所以,在这里,我们就把什么是面向对象,到底怎么面向对象开发,来搞一个清楚。

  JavaScript语言有一个特性,即万物皆对象,你看到的任何一段JavaScript代码,都很有可能是一个对象。只有五种基本类型不是对象:数值类型、字符串类型、布尔类型、空类型和未定义类型。其中前三个类型有对应的以基本类型封装形式体现的的对象表示(后面会详细介绍)。数值类型、字符串类型的值可以通过程序员或者位于幕后的JavaScript解析器来实现向对象的转换。

  函数实际上也是对象,函数有属性和方法。

  任何一门语言中最简单的事情就是定义一个变量。在JavaScript中,一旦定义好了变量,同时也就已经正在处理对象了。首先,该对象会自动成为内置对象的一个属性,成为激活对象(如果该变量是一个全局变量,那么该变量会成为全局对象的一个属性)。第二,该变量实际上也是伪类(这里我理解为,未通过“显式”的方法,比如构造函数,生成(或继承)的具有属性的一个对象),该属性决定了该变量是否可以被修改、被删除和在一个for-in循环中枚举(可以通过Object.getOwnPropertyDescriptor来查看)。

  那么对象到底是什么呢?其实对象仅仅是一个容器,该容器包含了命名的属性,键值对(大多数)的列表。这里面的属性可以是函数(函数对象),这种情形下我们称其未为方法。

  关于创建的对象的另外一件事情是可以在任意时间修改该对象(尽管ECMAScript引入了API来防止突变)。可以对一个对象执行添加、删除和更新它的成员变量。

  最后,需要记住的是对象主要有两种类型:原生的(Native,如ECMAScript标准),主机的(Host即宿主的,比如浏览器环境)。另外,原生对象可以进一步分为内置对象(例如数组,日期对象等)和用户自定义对象(如var o = {})等。主机对象包含Windows对象和所有的DOM对象。

    

  没有类

  在JavaScript中没有类,我们只处理对象。尽量多使用对象的组合,而不是使用类的继承。这句话的意思是通过已有的对象组合来获取新对象,是比通过很长的父 - 子继承链来创建新的对象更好的一方法。

  原型

  JavaScript没有继承,尽管这是重用代码的一种方式。可以使用多种方法来实现继承,这里通常使用原型。原型是一个对象,并且创建的每一个都会自动获取一个Prototypes属性,该属性指向一个新的空对象。该对象几乎等同于采用对象字面量或Object()创建的对象,区别在于他的constructor属性指向了所创建的函数,而不是指向内置的Object()函数。可以为该空对象增加成员变量,以后其他对象也可以从该对象继承并像使用自己的属性一样使用该对象的属性。

  要记住,每一个函数都有prototype属性,每一个对象都有一个__proto__属性。(先带着疑问,后面的文章会详细解答。)

  简单的介绍之后,我又想起了最开始聊过的问题。到底什么是面向对象?到底如何面向对象开发(编程)?

  首先要说的是,面向对象与面向对象编程即OOP(Object Oriented Programming)是两回事,个人理解,面向对象是一种描述,我们应该使用怎样的手段去做一件事,而面向对象编程,则是一种方法,也就是说,我们使用面向对象手段方法,去进行开发。另外的,还有函数式编程,那我个人理解,函数式编程也是一种方法,我们使用函数式的方法、方式去编程,编写代码。

  那么面向对象是什么呢?其实我的理解,就是在一切的编程“沟通”中数据流转的执行方式,我们通过对象的方式,去进行数据的传递及流转,那什么是“对象的方式”,即:类与实例,而js中没有类的概念,那么就要使用到原型。所以,在js中发挥原型的能力,使用原型的能力去编程,就可以大概的理解为是面向对象的编程(当然,要知道,这实际上是很片面的理解)。

  希望我的理解没有出现方向性的错误,后面,会详细的介绍原型以及继承的内容。

《JavaScript 模式》读书笔记(1)— 简介的更多相关文章

  1. JavaScript模式读书笔记 文章3章 文字和构造

    1.对象字面量     -1.Javascript中所创建的自己定义对象在任务时候都是可变的.能够从一个空对象開始,依据须要添加函数.对象字面量模式能够使我们在创建对象的时候向其加入函数.       ...

  2. JavaScript模式读书笔记 第4章 函数

    2014年11月10日 1.JavaScript函数具有两个特点: 函数是第一类对象    函数能够提供作用域         函数即对象,表现为:         -1,函数能够在执行时动态创建,也 ...

  3. 《你不知道的javascript》读书笔记2

    概述 放假读完了<你不知道的javascript>上篇,学到了很多东西,记录下来,供以后开发时参考,相信对其他人也有用. 这篇笔记是这本书的下半部分,上半部分请见<你不知道的java ...

  4. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  5. 《Java并发编程实战》读书笔记一 -- 简介

    <Java并发编程实战>读书笔记一 -- 简介 并发的历史 并发的历史,也是人类利用有限的资源去提高生产效率的一个的例子. 设想现在有台计算机,这台计算机具有以下的资源: 单核CPU一个 ...

  6. Javascript & JQuery读书笔记

    Hi All, 分享一下我学JS & JQuery的读书笔记: JS的3个不足:复杂的文档对象模型(DOM),不一致的浏览器的实现和便捷的开发,调试工具的缺乏. Jquery的选择器 a. 基 ...

  7. SQL反模式读书笔记思维导图

    在写SQL过程以及设计数据表的过程中,我们经常会走一些弯路,会做一些错误的设计.<SQL反模式>这本书针对这些经常容易出错的设计模式进行分析,解释了错误的理由.允许错误的场景,并给出更好的 ...

  8. Javascript模式(第一章简介)------读书笔记

    一:模式 模式是一个通用问题的解决方案,可以提供一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 本书主要讨论如下三种类型的模式 1 设计模式:可复用面向对象软件的基础,包括singleto ...

  9. 《Javascript模式》之对象创建模式读书笔记

    引言: 在javascript中创建对象是很容易的,可以使用对象字面量或者构造函数或者object.creat.在接下来的介绍中,我们将越过这些方法去寻求一些其他的对象创建模式. 我们知道js是一种简 ...

  10. 《JavaScript 高级程序设计》读书笔记一 简介

    一   历史 二   实现 a. javascript三个部分: ECMAScript:由ECMA-262定义,提供核心语言功能: DOM:提供HTML的应用程序编程接口/提供访问和操作网页内容的方法 ...

随机推荐

  1. 学习python-20191203-Python Flask高级编程开发鱼书_第02章 Flask的基本原理与核心知识

    视频01: 做一个产品时,一定要对自己的产品有一个明确的定位.并可以用一句话来概括自己产品的核心价值或功能. 鱼书网站几个功能 1.选择要赠送的书籍,向他人赠送书籍(价值功能,核心价值的主线): 2. ...

  2. discount the possibility|pessimistic|bankrupt|

    Nor can we discount the possibility that some factor in the diet itself has harmful effects. ADJ-GRA ...

  3. JSON — Java与JSON数据互转

    转换时Bean所要求的: 被转换的Bean必需是public的. Bean被转换的属性一定要有对应的get方法,且一定要是public的. Bean中不能用引用自身的this的属性,否则运行时出现et ...

  4. 五、RabbitMQ Java Client基本使用详解

    Java Client的5.x版本系列需要JDK 8,用于编译和运行.在Android上,仅支持Android 7.0或更高版本.4.x版本系列支持7.0之前的JDK 6和Android版本. 加入R ...

  5. Java反射的应用 --- 内省

    一.基础概念 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.Java JDK中提供了一套 API 用来访问某个属性的 getter/sette ...

  6. fedoar29配置漏洞平台webgoat

    fedoar29配置漏洞平台webgoat 该环境基于java环境,故需要配置相应的java版本 查看java版本 1 java -version 结果如下: 123 openjdk version ...

  7. 吴裕雄--天生自然HTML学习笔记:HTML - XHTML

    XHTML 是以 XML 格式编写的 HTML. 什么是 XHTML? XHTML 指的是可扩展超文本标记语言 XHTML 与 HTML 4.01 几乎是相同的 XHTML 是更严格更纯净的 HTML ...

  8. springboot中使用异步的常用两种方式及其比较

    一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来优化.实现异步的常用方法远不止两种,但是个人经验常用的,好用 ...

  9. axios 二次封装

    一般项目往往要对 axios 库进行二次封装,添加一些自定义配置和拦截器等 案例 ./service/axios.js 1234567891011121314151617181920212223242 ...

  10. 谈谈Spring的IoC之注解扫描

    问题   IoC是Inversion of Control的缩写,翻译过来即"控制反转".IoC可以说是Spring的灵魂,想要读懂Spring,必先读懂IoC.不过有时候硬着头皮 ...