Javascript 巩固:阮一峰javascript教程 ,2017-1-17

一个对象的原型链上的所有东西都可以被其所有实例继承哦!   

1.全局对象Global: 这个Global对象跟运行环境有关。在浏览器运行环境中。Global就是window对象。在nodejs中。Global对象是global对象。

2.http://www.ruanyifeng.com/blog/2009/09/find_element_s_position_using_javascript.html (js获取页面元素的位置)

3.其宿主环境:浏览器 node 操控浏览器的能力

脚本语言:不具备开发OS的能力。

4.事件驱动(event-driven)和非阻塞式(non-blocking)设计

5.JavaScirpt是一种动态类型语言,也就是说,变量的类型没有限制,可以赋予各种类型的值。

6.JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象。

7.Object()方法,将任意值转换为对象。

8.Object.keys(),Object.getOwnPropertyNames()

遍历一个对象的属性(但不包括继承来的属性名哦),返回值都是数组, 但后者还返回不可枚举属性名。

9.Object.create():生成一个新对象,并该对象的原型。

Object.getPrototypeOf():获取对象的Prototype对象。

10.除了Object对象本身的方法,还有不少方法是部署在Object.prototype对象上的,所有Object的实例对象都继承了这些方法。

Object实例对象的方法,主要有以下六个。

a:valueOf():返回当前对象对应的值。

b:toString():返回当前对象对应的字符串形式。

c:toLocaleString():返回当前对象对应的本地字符串形式。

d:hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。

e:isPrototypeOf():判断当前对象是否为另一个对象的原型。

f:propertyIsEnumerable():判断某个属性是否可枚举。

11.方法覆盖: 自定义valueOf() 覆盖Object.prototype.valueOf

12.利用这个特性,可以写出一个比typeof运算符更准确的类型判断函数。

http://javascript.ruanyifeng.com/stdlib/object.html

13.它的核心思想是将真实世界中各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。

14.“对象”是一个容器,封装了“属性”(property) ——》 对象的状态

和“方法”(method)。 ——》 对象的行为

15.JavaScript语言使用构造函数(constructor)作为对象的模板。 模板 !!!!!!!!!!!!!!

16.为了与普通函数区别,构造函数名字的第一个字母通常大写。

17.由于在严格模式中,函数内部的this不能指向全局对象,默认等于undefined,导致不加new调用会报错(JavaScript不允许对undefined添加属性)。

18.new命令的原理

a: 创建一个空对象,作为将要返回的对象实例。

b:将这个空对象的原型,指向构造函数的prototype属性。

c:将这个空对象赋值给函数内部的this关键字。

d:开始执行构造函数内部的代码。

构造函数执行后,会返回一个对象。

19.为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新 标准并没有改变JavaScript单线程的本质。

20.浏览器假死:单线程 前面任务特耗时,后面的排队长时间内无法得到执行。

21.Event Loop机制:

CPU和IO设备之间的读取速度差距导致一个任务的耗时更多的取决于IO设备的读写。 IO设备拖后腿了!

CPU完全可以不管IO设备,挂起处于等待中的任务(当前的任务正在进行IO操作),先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续 执行下去。

22. 消息队列(message queue)运行线程只要发现消息队列不为空,就会取出排在第一位的那个消息,执行它对应的回调函数。

每条消息与一个回调函数相联系,也就是说,程序只要收到这条消息,就会执行对应的函数。

23.运行以后的程序叫做“进程”(process)。

24.setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。

setInterval函数的用法与setTimeout完全一致,区别仅仅在于setInterval指定某个任务每隔一段时间就执行一次,也就是无限次的定时执行。

整数传入clearTimeout和clearInterval函数,就可以取消对应的定时器。