重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏, 天天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的能够加入winter的专栏学习【原文有winter的语音】,若有侵权请联系我,邮箱:kaimo313@foxmail.com。
关于第一点:前端
var a1 = { a: 1 }; var a2 = { a: 1 }; console.log(a1 == a2); // false
关于第2、三点:java
c++
中称"状态和行为"为成员变量
和成员函数
java
中则称它们为属性
和方法
javaScript
中将状态和行为统一抽象为属性
winter举了个例子,代码以下:c++
var o = { d: 1, f() { console.log(this.d); } };
上面代码中,o是对象,d是一个属性,而函数f也是一个属性,只是写法不同,总结来讲,在JavaScript中,对象的状态和行为其实都被抽象为了属性。函数
对象具备高度的动态性,这是由于 JavaScript 赋予了使用者在运行时为对象添改状态和行为的能力。
举例说明运行时如何向一个对象添加属性:性能
var o = { a: 1 }; o.b = 2; console.log(o.a, o.b); //1 2
为了提升抽象能力,JavaScript的属性被设计成比别的语言更加复杂的形式,它提供了数据属性和访问器属性(getter/setter)两类。学习
4个特征:this
value
:就是属性的值.writable
:决定属性可否被赋值.enumerable
:决定 for in 可否枚举该属性.configurable
:决定该属性可否被删除或者改变特征值.2.2.2.一、4个特征:设计
getter
:函数或 undefined,在取属性值时被调用.setter
:函数或 undefined,在设置属性值时被调用.enumerable
:决定 for in 可否枚举该属性.configurable
:决定该属性可否被删除或者改变特征值.2.2.2.二、Object.getOwnPropertyDescripter 和 Object.defineProperty()code
var o, d; o = { get foo() { return 17; } }; d = Object.getOwnPropertyDescriptor(o, "foo"); // d { // configurable: true, // enumerable: true, // get: /*the getter function*/, // set: undefined // } o = { bar: 42 }; d = Object.getOwnPropertyDescriptor(o, "bar"); // d { // configurable: true, // enumerable: true, // value: 42, // writable: true // } o = {}; Object.defineProperty(o, "baz", { value: 8675309, writable: false, enumerable: false }); d = Object.getOwnPropertyDescriptor(o, "baz"); // d { // value: 8675309, // writable: false, // enumerable: false, // configurable: false // }
实际上 JavaScript 对象的运行时是一个“属性的集合”,属性以字符串或者 Symbol 为 key,以数据属性特征值或者访问器属性特征值为 value。对象
看完winter的这篇文章深感本身的基础之薄弱,越模糊的东西越要清楚其本质,才能保持对事物的正确判断。