面向对象基础
JS编程既有函数式编程也有面向对象编程
简单说一下面向对象:抽象现实世界
进入正题
创建对象的方式
1:传统Object()的方式
1 var obj = Object() 2 obj.name = "yaokaixin" 3 obj.mood = "happy" 4 obj.age = 18 5 console.log(obj)

2:现在喜欢的方式
1 var obj = { 2 name: "yaokaixin", 3 mood: "happy", 4 age: 18 5 } 6 console.log(obj)

怎么对属性进行限制
第二种方式的属性都是创建在对象里面的,我们可以用属性,描述符来限制属性
需要用到Object.defineProperty() ----- 定义一个新属性,或者修改一个对象现有属性 具体用法见例子
数据属性描述符(定义默认为false,修改默认为true)
1 var obj = { 2 name: "tyy", 3 mood: "unhappy", 4 hobby: "study", 5 age: 18 6 } 7 //修改一个对象的现有属性 8 Object.defineProperty(obj, 'age', { 9 value: 20, //设置属性的值 默认是undefined 10 configurable: true, //可配置的 代表属性是否可以被修改特性或者删除 11 // enumerable: false, //表示属性是否可以通过for-in或者Object.keys()放回该属性 12 writable: false, //表示是否可以修改属性的值 13 14 }) 15 //定义一个新的属性 16 Object.defineProperty(obj, 'heght', { 17 value: 45, //设置属性的值 默认是undefined 18 configurable: true, //可配置的 代表属性是否可以被修改特性或者删除 19 enumerable: true, //表示属性是否可以通过for-in或者Object.keys()放回该属性 20 writable: false, //表示是否可以修改属性的值 21 22 }) 23 console.log(obj.age); 24 // obj.age = 18 25 console.log(obj.age); 26 console.log(Object.keys(obj));
存取属性描述符(也是 定义为false 修改为true)
1 var obj = { 2 name: "tyy", 3 age: 20 4 } 5 var money = 100000000000000 6 Object.defineProperty(obj, 'money', { 7 configurable: true, //表示属性特性是否可以被修改,以及是否可以删除该属性 8 enumerable: true, //表示是否可以使用for-in和Object.keys()遍历对象 9 get: function() { //获取属性时会执行的函数,默认undefined 10 console.log('我获得值啦嘿嘿'); 11 return money 12 }, 13 set: function(value) { //设置属性时会执行的函数,默认undefined 14 console.log('我设置值啦嘻嘻'); 15 money = value 16 } 17 }) 18 console.log(obj.money); 19 obj.money = 200000000000000 20 console.log(obj.money);

再来讲一下定义多个属性符使用Object.defineProperties()
1 var obj = { 2 name: 'tanyunyun', 3 age: 18 4 } 5 Object.defineProperties(obj, { 6 name: { 7 value: 'taosifan', 8 configurable: false 9 }, 10 age: { 11 value: 20 12 } 13 }) 14 console.log(obj);

最后补充一下对象方法:
1:禁止对象添加新的属性
preventExtendsions
1 var obj = { 2 name: 'tanyunyun', 3 age: 18 4 } 5 Object.defineProperty(obj, 'mood', { 6 value: "happy" 7 }) 8 console.log(obj); 9 Object.preventExtensions() //禁止对象添加新的属性

2:禁止对象配置/删除里面的属性
Object.seal()
1 var obj = { 2 name: 'tanyunyun', 3 age: 18 4 } 5 Object.defineProperty(obj, 'mood', { 6 value: "happy", 7 configurable: true, 8 enumerable: true 9 }) 10 Object.seal(obj) //禁止删除配置对象里面的属性 11 delete obj.name 12 console.log(obj);

3:禁止属性修改,冻结了
Object.freeze()
1 var obj = { 2 name: 'tanyunyun', 3 age: 18 4 } 5 Object.defineProperty(obj, 'mood', { 6 value: "happy", 7 configurable: true, 8 enumerable: true 9 }) 10 Object.freeze(obj) //禁止删除配置对象里面的属性 11 obj.name = "taosifan" 12 console.log(obj);

可以看到名字没有被修改

浙公网安备 33010602011771号