Nodejs与JavaScript和JSON
有一些人在学习JavaScript时会分不清Nodejs和JavaScript之间的区别,如果没有node,那么我们的JavaScript代码则由浏览器中的JavaScript解析器进行解析。几乎所有的浏览器都配备了JavaScript的解析功能(最出名的就是google的v8), 这也是为什么我们能在f12中直接执行JavaScript的原因。 而Nodejs则是由这个解析器单独从浏览器中拿出来,并进行了一系列的处理,最后成为了一个可以在服务端运行JavaScript的环境。 这里看到一个很好的例子,学过java的师傅应该就明白了。
那么JSON又是什么呢?简单概括一下就是JavaScript的对象表示方法,它表示的是声明对象的一种格式, 由于我们从前端接收到的数据基本都是字符串,因此在服务端如果要将这些字符串处理为其他格式,比如对象,就需要用到JSON了。
原型对象(prototype)与原型连接点(__proto__)与原型链
在c++或java这些面向对象的语言中,我们如果想要一个对象,首先需要使用关键字class声明一个类,再使用关键字new一个对象出来,但是在JavaScript中没有class以及类这种概念(为了简化编写JavaScript代码,ECMAScript 6后增加了class
语法,但class
其实只是一个语法糖)。 在JavaScript有这么两种声明对象的方式,为了好理解我们先引入类的思想。
person=new Object()person.firstname="John";person.lastname="Doe";person.age=50;person.eyecolor="blue";这种创建对象的方法还有另一种写法 如下person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};这种方法通过直接实例化构造方法Object()来创建对象
function person(firstname,lastname,age,eyecolor)这里创建了一个“类” 但是在JavaScript中叫做构造函数或者构造器{this.firstname=firstname;this.lastname=lastname;this.age=age;this.eyecolor=eyecolor;}var myFather=new person("John","Doe",50,"blue");通过这个“类”实例化对象var myMother=new person("Sally","Rally",48,"green");这种方法先创建构造函数 再实例化构造函数 构造函数function也属于Object 如果对这里为什么属于Object而不属于Function有疑问请继续阅读 下面会解释
既然是通过实例化Object来创建对象或创建构造函数,在JavaScript中有两个很特殊的对象,Function() 和 Object() ,它们两个既是构造函数也是对象,作为对象是不是应该有一个“类”去作为他们的模板呢?
对于Object()来说,要声明这么一个构造函数我们可以使用关键字function来创建 。(在底层 使用function创建一个函数 其实就相当于这个过程)
function Object(){}在底层为var Object = new Function();
那么对于Function自己这个对象,他是怎么来的呢?如果用Function.__proto__
和Function.prototype进行比较,发现二者是全等的,所以Function创造了自己,也创造了Object,所以JavaScript中,所有函数都是对象,而对象是通过函数创建的。因此构造函数.prototype.__proto__
应该是Object.prototype,而不是Function.prototype,Function的作用是创建而不是继承。
那么提到了__proto__
和prototype
我们就来说说这两个是什么东西。
首先我们要了解以下概念:
__proto__
是任何一个对象拥有的属性
prototype
是任何一