企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### Object 1. 构造函数中的this如果返回对象类型数据,则this会发生改变,不再指向实例对象 ### this指向 1. ES5 this的指向取决于函数的运行,this的绑定和函数声明的位置没有任何关系,取决于函数的调用方式 2. call,apply都是显示传入this需要绑定的对象,区别在于参数的传递 3. bind硬绑定this对象,返回绑定后的对象,需要再一次调用 ### 函数的四种调用形式 1. new 构造函数调用(如果返回新对象,则this指向新创建的对象) 2. 显示绑定调用(call apply bind) 3. 对象方法调用 4. 直接调用 ### 对象的拥有两种属性:数据属性和访问器属性 1. 数据属性只能通过ES5的 Object.defineProperty定义 2. 在严格模式下操作不可操作的属性都会报错 3. 获取描述对象:Object.getOwnPropertyDescriptor( obj, "year" ) ``` Object.defineProperty(obj, 'name', { configurable: true, //是否可以通过delete删除属性 enumerable: false, // 是否能通过for in循环返回属性 writable: false, //是否能修改属性值 value: 'jack' //属性值 }) ``` 3. 访问器属性设置属性set与get操作,如果只 ``` Object.defineProperty(obj, 'year', { get(value) { return this.\_year }, set(value) { if (value \> 20) { this.\_year \= ++value } }, enumerable: true, configurable: true }) ``` 4. IE9及以下的浏览器只能使用下列方法进行定义,没有实现defineProperty方法 ``` obj.\_\_defineGetter\_\_('gender', function() { return this.\_year }) obj.\_\_defineSetter\_\_('gender', function(value) { this.\_year \= value }) ``` 5. 一次定义多个属性 ``` Object.defineProperties(obj, { like: { value: 'runing' }, object: { value: 'xiameimei', }, income: { get() { return 20 }, set(newval) { } } }) ```