6_1 理解对象

2019-08-26  本文已影响0人  诺诺诺诺Daddy
                    //创建object实例的方法创建对象
        var person = new Object();
        person.name = 'jerry';
        person.age = 22;
        person.job = 'Enginner';
        person.sayHi = function(){
            alert('hello'+this.name);
        }
        
        //对象字面量方式创建对象
        var person = {
            name:'jerry',
            age:20,
            job:'Enginner',
            sayHi:function(){
                alert('hello'+this.name);
            }
        }
        
        // 对象中的属性和方法都带有一些特性来定义他们的行为,这些特性还根据属性的不同而不一样, 属性分为数据属性和访问器属性
        // 数据属性:[[Configurable]](表示能否通过delete删除属性从而重新定义属性,或者能否把属性修改为访问器属性.默认为true);
        //      [[Enumeralbe]](能否通过for-in循环属性,默认为true);
        //      [[Writable]](能否修改属性的值.默认为true)
        //      [[Value]](包含属性的数据值,默认为undefined)
        // 要修改属性默认的特性,必须使用object.defineProperty(属性所在对象,属性名称,描述符对象)方法.
        var person1 = {};
        Object.defineProperty(person1,'name',{
            writable:false,
            value:'Petter'
        })
        // alert(person1.name);//Petter
        person1.name = 'Tom';
        // alert(person1.name);//Petter 不可修改
        delete person1.name;
        // alert(person1.name);
        
        
        // 访问器属性不包含数据值,它包含一对(getter 和 setter)函数,都是非必须的.
        // [[Configurable]](表示能否通过delete删除属性从而重新定义属性,或者能否把属性修改为访问器属性.默认为true);
        // [[Enumeralbe]](能否通过for-in循环属性,默认为true);
        // [[Get]] :在读取属性时调用的函数。默认值为 undefined 。
        // [[Set]] :在写入属性时调用的函数。默认值为 undefined 。
        // 访问器属性不能直接定义,必须使用 Object.defineProperty() 来定义
        // Object.getOwnPropertyDescriptor(指定对象,要获取描述符的属性名);方法可以取得给定属性的描述符
        var book = {
            _year:2004,//表示只能通过对象方法访问的属性
            edition:1
        }
        Object.defineProperty(book,'year',{
            get:function(){
                return this._year;
            },
            set:function(newValue){
                if (newValue > 2004) {
                    this._year = newValue;
                    this.edition += newValue - 2004;
                }
            }
        })
        book.year = 2005;
        var a = Object.getOwnPropertyDescriptor(book,'year');//Configurable Enumeralbe Get Set
        console.log(a);
        // alert(book.edition);//2
上一篇 下一篇

猜你喜欢

热点阅读