摘要: 面试中常会问到对this对象的理解 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了,也就是说this总是指向函数的直接调用者,而非间接调用者。 this的取值是执行环境的一部分,每次调用函数都会产生一个新的执行环境。 情况一:构造函数 构造函数就是用来new对 阅读全文
posted @ 2018-03-13 10:59 endlessmy 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 在说“执行环境”前先看一段代码 上图中,第一句报错,因为a没有定义。第二句和第三句是变量提升(JS在执行前会对声明部分做完整解析,同时局部会覆盖全局) 这说明,在一段JS代码一句一句执行前,浏览器已经做了一些准备工作。其中包括对变量的声明,而不是赋值。变量赋值是在赋值语句执行时才执行的。可看下图: 阅读全文
posted @ 2018-03-13 10:05 endlessmy 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 在JS中,对象可以随时改动。 对象或者函数,刚开始new出来,可能啥属性都没有,但是可以自己加。 在jQuery源码中,对象被创建时什么属性也没有,都是代码一步步执行时,一个个加上的。 其次如果继承的方法不合适,可以做出修改 如上图,Object和Array的toString()方法不一样。肯定是A 阅读全文
posted @ 2018-03-13 09:42 endlessmy 阅读(87) 评论(0) 推荐(0) 编辑
摘要: JS中的继承是通过原型链来体现的。 上面代码中,f1对象是通过Foo函数new出来的,f1.a是f1对象的基本属性,那f1.b是从哪来的呢?——从Foo.prototype得来,f1._proto_ Foo.prototype。 访问一个对象的属性时,现在基本属性中找,如果没有,再沿着_proto_ 阅读全文
posted @ 2018-03-12 20:35 endlessmy 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 对于值类型来说,可以用typeof判断,但typeof判断引用类型的时候返回值只有object/function,并不知道到底是哪一个。这个时候就要用到instance。例如 上图中,f1是被Foo函数创建得,但是“f1 instanceof Object”为什么是true呢? 至于为什么过会儿再说 阅读全文
posted @ 2018-03-12 14:00 endlessmy 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 上文提到,每个函数都有一个prototype属性,即原型。而每个对象都有个_proto_属性,称之为隐式原型。 这个_proto_是一个隐藏的属性。 从上面截图可以看出,obj._proto_和Object.prototype的属性一样 obj这个对象本质上是被Object函数创建的,因此,obj. 阅读全文
posted @ 2018-03-12 13:32 endlessmy 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 上文中提到对象是函数创建得,而函数也是一种对象。对象就是属性的集合,没有方法。 每个函数都有一个属性——prototype。 这个prototype的属性值是一个对象(属性的集合),默认有一个constructor属性,指向这个函数本身。 上图中,superType是一个函数,这个函数有个proto 阅读全文
posted @ 2018-03-12 11:32 endlessmy 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 上文已经提到,函数是对象的一种,因为可以通过instanceof判断。 函数是一种对象,但函数不像数组那样——你可以说数组是对象的一种,因为数组就像对象的一个子集一样。但函数与对象之间却不仅仅是包含与被包含的关系。 先看一个小例子 上面的例子说明:对象可以通过函数来创建 而其中的 Object 和 阅读全文
posted @ 2018-03-12 10:52 endlessmy 阅读(92) 评论(0) 推荐(0) 编辑
摘要: “一切都是对象”这句话的重点在于如何去理解“对象”这个概念。 当然,也不是所有的都是对象,值类型就不是对象。 JS中一个常用的操作符——typeof用来判断数据类型 从以上代码可以看出,undefined、number、string、boolean、null属于简单的值类型,不是对象。剩下的几种情况 阅读全文
posted @ 2018-03-12 10:42 endlessmy 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 一、用法 用法一: type为module是为了区别于其他js 用法二: node中使用 二、新增功能 1、定义变量let 之前: 新增:let用来定义变量 区别:1)作用域范围,let定义的变量具备块级作用域(只要被花括号包起来,只能在代码块里面使用),var只在函数作用域范围内有效 2)let定 阅读全文
posted @ 2018-03-09 11:14 endlessmy 阅读(103) 评论(0) 推荐(0) 编辑