JavaScript高级程序设计(第3版) 笔记

2018-07-03  本文已影响11人  Jay_Chen

第六章 面向对象的程序设计

6.1 理解对象

6.1.1 属性类型

        var person = {
            name: "Jay",
        }
        console.log(person.name); // Jay
        person.name = "Lucy";
        console.log(person.name); // Lucy

默认可以修改,可以使用Object.defineProperty()方法。接受三个参数:a:属性所在的对象、b:属性的名字、c: 一个描述符对象。,描述符对象的属性必须是:configurable、enumerable、writable、value。

        var person = {}
        Object.defineProperty(person, "name", {
            writable:false,
            value: "Jay"
        })
        console.log(person.name); // Jay
        person.name = "Lucy";
        console.log(person.name); // Jay

在调用Object.defineProperty()方法创建一个新的属性时,如果不指定,configurable、enumerable和writable 特性的默认值都是false

        var person = {
            _name: "Jay",
            age: "18"
        };
        Object.defineProperty(person,"name",{
            get: function(){
                return this._name;
            },
            set: function(newName){
                if(this._name !== newName){
                    this._name = newName;
                    this.age+= newName
                }
            }
        });
        person.name = "Lucy";
        console.log(person.age); // 18Lucy

6.1.2 定义多个属性
        var book = {};
        Object.defineProperties(book, {
            _year: {
                writable: true,
                value: 2000
            },
            edition: {
                writable: true,
                value: 1
            },
            year: {
                get: function() {
                    return this._year;
                },
                set: function(newValue) {
                    if(newValue > 2000) {
                        this._year = newValue;
                        this.edition += newValue - 2000;
                    }
                }
            },
        })
        book.year = 2018;
        console.log(book.edition); // 19
6.1.3 读取属性的特性
        var book = {};
        Object.defineProperties(book, {
            _year: {
                writable: true,
                value: 2000
            },
            edition: {
                writable: true,
                value: 1
            },
            year: {
                get: function() {
                    return this._year;
                },
                set: function(newValue) {
                    if(newValue > 2000) {
                        this._year = newValue;
                        this.edition += newValue - 2000;
                    }
                }
            },
        })
        var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
        console.log(descriptor.value); // 2000
        console.log(descriptor.configurable); // false
        console.log(typeof descriptor.get); // undefined
        var descriptor = Object.getOwnPropertyDescriptor(book,"year");
        console.log(descriptor.value); // undefined
        console.log(descriptor.enumerable); // false
        console.log(typeof descriptor.get); // function

6.2 创建对象

上一篇 下一篇

猜你喜欢

热点阅读