面向对象基础

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);

 

 可以看到名字没有被修改

posted @ 2022-03-18 09:58  沁霓  阅读(39)  评论(0)    收藏  举报