ES5给object扩展的一些静态方法

雨燕双飞 提交于 2019-12-08 13:05:31

1. Object.create(prototype[, descriptors]) : 创建一个新的对象

1). 以指定对象为原型创建新的对象

2). 指定新的属性, 并对属性进行描述

value : 指定值

writable : 标识当前属性值是否是可修改的, 默认为true

get : 用来得到当前属性值的回调函数

set : 用来监视当前属性值变化的回调函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        'use strict'
 //  1. Object.create(prototype,[descriptors])
    //   作用:以指定对象作为原形的创建的新对象
    //   为新的对象指定新的属性,并对属性进行描述
    //   value:指定值
    //   writable 标识当前属性是否可以被修改,默认为false
    //   configurable:标识当前属性是否可以被删除,默认为false
    //   enumerable:标识当前属性是否能用for in 枚举,默认为false



      var obj={username:'damu',age:30}
      var obj1={}  
      //Object O是大写
 //     obj1=Object.create(obj);
 //     console.log(obj1)

      //obj1 添加属性
    //    obj1=Object.create(obj,{
    //        sex:{
    //            value:'男'
    //        }

    //    })
    //    console.log(obj1.sex)

       //修改obj1的属性
    //    obj1=Object.create(obj,{
    //        sex:{
    //            value:'男',
    //            writable:true
    //        }

    //    })
    //  console.log(obj1.sex)
    //  obj1.sex='女'
    //  console.log(obj1.sex);


      //   删除obj1的属性
    //    obj1=Object.create(obj,{
    //        sex:{
    //            value:'男',
    //            writable:true,
    //            configurable:true
    //        }

    //    })
    //  console.log(obj1.sex)
    //  obj1.sex='女'
    //  console.log(obj1.sex)
    //  delete obj1.sex;
    //  console.log(obj1)
  
              
     //    for in 枚举
        obj1=Object.create(obj,{
            sex:{
                value:'男',
                writable:true,
                configurable:true,
                enumerable:true
            }

        })

        for(var i in obj1){
            console.log(i)
        }



    </script>
</body>
</html>
Object create

2. Object.defineProperties(object, descriptors) : 为指定对象定义扩展多个属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_Object扩展</title>
</head>
<body>
<!--
ES5给Object扩展了好一些静态方法, 常用的2个:
1. Object.create(prototype, [descriptors])
  * 作用: 以指定对象为原型创建新的对象
  * 为新的对象指定新的属性, 并对属性进行描述
    value : 指定值
    writable : 标识当前属性值是否是可修改的, 默认为false
    configurable: 标识当前属性是否可以被删除 默认为false
    enumerable: 标识当前属性是否能用for in 枚举 默认为false

2. Object.defineProperties(object, descriptors)
  * 作用: 为指定对象定义扩展多个属性
  * get :用来获取当前属性值得回调函数
  * set :修改当前属性值得触发的回调函数,并且实参即为修改后的值
  * 存取器属性:setter,getter一个用来存值,一个用来取值
-->
<script type="text/javascript">
 
    //Object.defineProperties(object, descriptors)
    var obj2 = {
        firstName : 'curry',
        lastName : 'stephen'
    };
    Object.defineProperties(obj2, {
        fullName : {
            get : function () {
                return this.firstName + '-' + this.lastName
            },
            set : function (data) {
                var names = data.split('-');
                this.firstName = names[0];
                this.lastName = names[1];
            }
        }
    });
    console.log(obj2.fullName);
    obj2.firstName = 'tim';
    obj2.lastName = 'duncan';
    console.log(obj2.fullName);
    obj2.fullName = 'kobe-bryant';
    console.log(obj2.fullName);
</script>
</body>
</html>
View Code

3.

对象本身的两个方法
* get propertyName(){} 用来得到当前属性值的回调函数
* set propertyName(){} 用来监视当前属性值变化的回调函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
    对象本身的两个方法
    * get propertyName(){} 用来得到当前属性值的回调函数
    * set propertyName(){} 用来监视当前属性值变化的回调函数
-->
<script type='text/javascript'>
    var obj = {
        firstName : 'kobe',
        lastName : 'bryant',
        get fullName(){
            return this.firstName + ' ' + this.lastName
        },
        set fullName(data){
            var names = data.split(' ');
            this.firstName = names[0];
            this.lastName = names[1];
        }
    };
    console.log(obj.fullName);
    obj.fullName = 'curry stephen';
    console.log(obj.fullName);

</script>
</body>
</html>
View Code

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!