zoukankan      html  css  js  c++  java
  • 409 Object扩展: Object.create(),Object.defineProperties(),get propertyName(){},set propertyName(){}

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>03_Object扩展</title>
    </head>
    
    <body>
        <!--
            ES5给Object扩展了好一些静态方法, 常用的2个:
            1. Object.create(prototype, [descriptors])
            * 作用: 以指定对象为原型,创建新的对象 【Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。】
            * 为新的对象指定新的属性, 并对属性进行描述
                value : 指定值
                writable : 标识当前属性值是否是可修改的, 默认为false
                configurable: 标识当前属性是否可以被删除, 默认为false
                enumerable: 标识当前属性是否能用for in 枚举, 默认为false
    
            2. Object.defineProperties(object, descriptors)
            * 作用: 为指定对象定义扩展多个属性
            * get :用来获取当前属性值的回调函数
            * set :修改当前属性值得触发的回调函数,并且实参即为修改后的值
            * 存取器属性:setter、getter,一个用来存值,一个用来取值
        -->
    
        <script type="text/javascript">
            var obj = {
                name: 'curry',
                age: 29
            }
    
            var obj1 = {};
    
            obj1 = Object.create(obj, {
                sex: {
                    value: '男',
                    writable: true
                }
            });
    
            obj1.sex = '女';
            console.log(obj1.sex); // 女
    
            // obj1可以使用obj的属性。
            console.log(obj1.name); // curry
            console.log(obj1.age); // 29
    
    
            // ----------------------
    
    
            //Object.defineProperties(object, descriptors)
            var obj2 = {
                firstName: 'curry',
                lastName: 'stephen'
            };
    
            Object.defineProperties(obj2, {
                fullName: {
                    get: function() {
                        console.log('执行get了')
                        console.log('get的this是:', this) // this指向obj2,调用get的是obj2,换成箭头函数,就指向window
                        return this.firstName + '-' + this.lastName
                    },
                    set: function(data) {
                        console.log('执行set了')
                        console.log('set的this是:', this) // this指向obj2,调用set的是obj2,换成箭头函数,就指向window
                        var names = data.split('-');
                        this.firstName = names[0];
                        this.lastName = names[1];
                    }
                }
            });
            console.log(obj2.fullName); // curry-stephen
    
            obj2.firstName = 'tim';
            obj2.lastName = 'duncan';
            console.log(obj2.fullName); // tim-duncan
    
            obj2.fullName = 'kobe-bryant'; // 执行set了
            console.log(obj2.fullName); // kobe-bryant
        </script>
    </body>
    
    </html>
    

    <!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是回调函数,把get当做function即可
                get fullName() {
                    console.log('执行了get')
                    return this.firstName + ' ' + this.lastName
                },
                // set是回调函数,把set当做function即可
                set fullName(data) {
                    console.log('执行了set')
                    var names = data.split(' ');
                    this.firstName = names[0];
                    this.lastName = names[1];
                }
            };
    
            console.log(obj.fullName); // 执行了get  kobe bryant
            obj.fullName = 'curry stephen'; // 执行了set
            console.log(obj.fullName); // 执行了get  curry stephen
        </script>
    </body>
    
    </html>
    
  • 相关阅读:
    菜鸟学存储:网络存储IP SAN与IB SAN
    读xml高手
    预先加载图片
    xred520
    最简单准确的硬盘整数分区设置操作方法
    Google 每天处理约 20000TB 的数据
    IE 8 无法正常使用网站后台编辑器问题
    常用的JS技术1
    adodb stream 使用说明
    [Tools] JDGUI(Java Decompiler)
  • 原文地址:https://www.cnblogs.com/jianjie/p/12561771.html
Copyright © 2011-2022 走看看