01 明确学习路线和方法
建立知识架构
一种是 html/css/js(但是除了这些语言 还有打包/测试/dom和bom等等问题) 一种是 文法/语义/运行时(粗略视为语法/语法的意义/算法和数据结构)
追本溯源
了解背景
02 前端知识架构图
写在另一篇 juejin.im/post/5cbe89…
前端架构的主要职责是兼容性、复用和能力扩展
03/04语义化
写在上面那一篇 juejin.im/post/5cbe89…
语义化就像写论文,规规矩矩遵守格式
05 js类型
写在上面那一篇 juejin.im/post/5cbe89…
js中的undefined是一个变量 而不是一个关键字 是js公认的设计失误
06 面向对象还是基于对象
对象: 一切事物的总称.
在《面向对象分析与设计》这本书中,Grady Booch替我们做了总结,他认为,从人类的认知角度来说,对象应该是下列事物之一:
一个可以触摸或者可以看见的东西;
人的智力可以理解的东西;
可以指导思考或行动(进行想象或施加动作)的东西。
对象有以下特征:
- 对象具有唯一标识性:即使完全相同的两个对象,也并非同一个对象。
=> 地址不同,不管内容如何,都不是同一个对象. - 对象有状态:对象具有状态,同一对象可能处于不同状态之下。
=> 对象可以有自己的属性,并且同一个对象,属性可能不同 - 对象具有行为:即对象的状态,可能因为它的行为产生变迁。
=> 在调用对象方法的过程中,可以更改对象的属性
对象的两类属性
-
数据属性 的特征
value:就是属性的值。
writable:决定属性能否被赋值。
enumerable:决定for in能否枚举该属性。
configurable:决定该属性能否被删除或者改变特征值。
大多数情况下我们只关心数据属性的值就可以 -
访问器属性(getter/setter) 的特征
getter:函数或undefined,在取属性值时被调用。
setter:函数或undefined,在设置属性值时被调用。
enumerable:决定for in能否枚举该属性。
configurable:决定该属性能否被删除或者改变特征值。
以上值都默认为true
可以用Object.getOwnPropertyDescripter来查看
var o = {a:1}
o.b = 2
Object.getOwnPropertyDescriptor(o,"a")
//{value: 1, writable: true, enumerable: true, configurable: true}
复制代码
想要改变属性的特征或者定义访问器属性,可以用Object.defineProperty
var o = { a: 1 };
Object.defineProperty(o, "b", {value: 2, writable: false, enumerable: false, configurable: true});
//{a: 1, b: 2}
Object.getOwnPropertyDescriptor(o,"a");
//{value: 1, writable: true, enumerable: true, configurable: true}
Object.getOwnPropertyDescriptor(o,"b");
//{value: 2, writable: false, enumerable: false, configurable: true}
o.b = 3;
console.log(o.b); // 2
复制代码