对象
1.定义:就是无序属性的集合,其属性可以包含基本值、对象或者函数。
3.2.1 定义访问器属性:访问器属性不能像定义数据属性那样可以直接定义---定义访问器属性:Object.defineProperty(targetObj,property,{
get:callback;
set:callback(newvalue)
})
3.2.2 访问器属性有四个特性:configurable(和之前的差不多),enumerable,get(访问属性时调用的函数,默认undefined); set(设置属性时调用的函数,默认undefined);
1.定义:就是无序属性的集合,其属性可以包含基本值、对象或者函数。
2.用法:字面量的形式创建对象,说白了就是“{}”。
3.对象中的属性,分为两种:数据属性和访问器属性;
3.1 数据属性:这种属性会有对应的值(可以认为就是我们常见的对象的属性),该属性的特性(如是否可以修改值,是否可以删除等等),分别是:configurable(是否可以删除属性等,默认true),enumerable(是否可以循环返回属性,默认true), writable(是否可以复写属性值,默认true),value(属性的值,默认undefined)
修改对象中数据属性的默认特性:Object.defineProperty(targetObj,property,descriptor),其中最后一个参数是一个对象,其属性是对象的数据属性的特性参数的一个或者多个;
var app = { name:"王者荣耀",//数据属性 isPlayed:false//数据属性 } Object.defineProperty(app,"name",{ writable:false,//不可更改 configurable:false//不可删除 }) app.name = "吃鸡游戏"; console.log(app.name)//还是“王者荣耀” delete app.name; console.log(app.name)//该属性还是存在,“王者荣耀”。 var person = { name:"张三", age:23 } Object.defineProperty(person,"age",{configurable:false}); delete person.age; console.log(person.age)//undefined,因为已经删除了3.2 访问器属性: 归根结底还是对象中的属性, 只不过这种属性没有值--它们包含一对儿 getter 和 setter 函数,在读取访问器属性时,会调用 getter 函数,在设置访问器属性的时候,会调用setter函数并传入新值。
3.2.1 定义访问器属性:访问器属性不能像定义数据属性那样可以直接定义---定义访问器属性:Object.defineProperty(targetObj,property,{
get:callback;
set:callback(newvalue)
})
3.2.2 访问器属性有四个特性:configurable(和之前的差不多),enumerable,get(访问属性时调用的函数,默认undefined); set(设置属性时调用的函数,默认undefined);
/* 访问器属性 */ var animal = { class:"狗狗", name:"哈士奇", form:"地球", _hobby:"⛏破坏" } // 定义对象animal的访问器属性hobby:怎么看着那么像设置访问器属性的特性?? Object.defineProperty(animal,"hobby",{ configurable:false,//该属性不可删除 get:function(){//getter函数 return this._hobby; }, set:function(newValue){//setter函数 alert(newValue) } }) alert(animal.hobby)//此时访问对象的访问器属性hobby,所以调用get函数,返回对象的“_hobby”属性 animal.hobby = "犯二"//犯二,此时是设置访问器属性,调用set函数,所以回弹出“犯二” delete animal.hobby;//将删除属性,但是却删除不了 alert(animal.hobby)//访问该属性,所以会返回”⛏破坏“4.一次给对象设置多种属性:
4.1 方法:Object.defineProperties(obj,{...}):通过这个方法可以一次性为对象同时定义这两种属性:obj是要对其定义的目标对象,{..}属性对象;
var douProp = {}; Object.defineProperties(douProp,{ height:{//数据属性 value:3.33 }, width:{//数据属性 value:9.00 }, length:{//访问器属性 get:function(){ return this.height }, set:function(newValue){ alert(newValue) } } })
4.2 获取对象属性的特性:Object.getOwnPropertyDescriptor(targetObj,prop):得到哪个对象的哪个属性的特性。