ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 变量与对象 变量又分为基本类型变量和引用类型变量。 ## 变量与引用 对象的赋值其实是将对象的引用进行赋值。 ```javascript var obj = { x: 1, y: 2 }; // a、b 同时引用了 obj var b = obj; var a = obj; // 修改 b 中的 x b.x = 2; // 同时也会影响到 a a // { x:2, y:2} ``` ## 变量与属性 在 JavaScript 中变量就是属性。 全局变量(以及全局函数名)是全局对象属性。 在函数内声明的变量是局部变量。 ## 对变量是否存在的检验 通过 `in` 运算符来检验 ```javascript if( 'a' in this){ var b = a; }else{ var b = 1; } ``` ## JavaScript 的对象 在 JavaScript 中,一切都是对象。对象之间的协作通过属性访问来实现。而对象之间的共性,则是通过继承同一个对象的性质的方式来实现。JavaScript 通过基于原型的形式来实现继承。 ## 构造函数与 new 表达式 构造函数是用于生成对象的函数。 构造函数的调用方式: - 构造函数本身和普通的函数声明式相同。 - 构造函数通过 new 表达式来调用。 - 调用构造函数的 new 表达式的值是对象的引用。 - 通过 new 表达式调用的构造函数内的 this 引用引用了对象。 ## 属性的属性 属性的属性名 | 含义 ---|--- writable | 可以改写属性值 enumerable | 可以通过 for in 语句枚举 configurable | 可以改变属性的属性。可以删除属性 get | 可以指定属性值的 getter 函数 set | 可以指定属性值的 setter 函数 ## 垃圾回收 不再使用的对象的内存将会自动回收,这种功能称作垃圾回收。所谓不再使用的对象,指的是没有被任何一个属性(变量)引用的对象。 ## 实现不可变对象的方式 方法名 | 属性新增 | 属性删除 | 属性值变更 | 确认方法 ---|---|---|---|--- preveentExtensions | false | true | true | Object.isExtensible seal | false | false | true Object.isSealed freeze | false | false | false | Object.isFrozen ```javascript var obj = { x: 1, y: 2 }; Object.seal(obj); ``` ## this 引用 函数的调用方式 | this 引用的引用对象 ---|--- 构造函数调用 | 所生成的对象 方法调用 | 接收方对象 apply 或 call | 由 apply 或 call 的参数指定的对象 其他方式的调用 | 全局对象 ## apply 与 call 可以改变函数 this 的引用,可以指向任意特定的对象。 apply 剩余的参数将通过数组来传递,call 是直接按原样来传递。 ```javascript function f(a,b){...}; var obj = {x:1}; f.apply(obj, [1,2]); f.call(obj, 1, 2); ```