美文网首页
6_1 理解对象

6_1 理解对象

作者: 诺诺诺诺Daddy | 来源:发表于2019-08-26 16:44 被阅读0次
                        //创建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

    相关文章

      网友评论

          本文标题:6_1 理解对象

          本文链接:https://www.haomeiwen.com/subject/jaddectx.html