美文网首页
步遥——面向对象设计程序

步遥——面向对象设计程序

作者: 你还想好吗 | 来源:发表于2020-12-01 14:06 被阅读0次

    1:什么是对象? 

    对象是无序属性的集合,其属性可以包含基本值,对象或者函数,可以把对象想象成散列表,一组名值对,其中值可以是数据或函数,名是字符串。

    2:如何创建对象?

    创建一个对象:

    var person = {

    name:'Nicholas',

    age:'29',

    job:'Software English',

    sayName:function(){

             alert(this.name)

           }

    }

    2.1:认识对象中的属性的特征:

    2.1.1 管理数据的属性:

    [[Configurable]]:true//能通过delete删除属性并重新定义;

    [[Enumerable]]:true//能通过for-in循环访问的属性

    [[Writable]]:true//能修改属性的值

    [[Value]]:true//属性的值

    如果想修改对象的属性的特性,需要使用下面方法:

    Object.defineProperty(person,'name',{

    writable:false,//不能修改属性值

    value:'Nicholas'

    })

    2.1.2 管理访问的属性:        

    [[Configurable]]:true//表示能够通过delete删除属性从而重新定义属性,能够修改属性的特性。

    [[Enumerable]]:true//表示能够通过for-in循环访问的属性

    [[Get]]:在读取属性时调用的函数,记住了是一个函数,这个函数一般返回一个值,即要访问的属性的值

    [[Set]]:在写入属性时调用的函数,记住也是一个函数

    以上的访问器属性也必须通过Object.defineProperty()定义

    练习一下:

    let person = {

        _name:'Nicholas',

        age:29,

        job:'Software English',

        sayName:function(){

            alert(this._name)

        }

    }

    Object.defineProperty(person,'name',{

        get:function(){

            return this._name;

        },

        set:function(value){

             this._name = value;

        }

    })

    // person.name = 'aaa'

    console.log(person.name)

    person中没有最初没有定义name属性,但是使用Object.defineProperty()方法定义了对name的访问属性,就是在访问的name的时候,会根据get和set方法的定义去获取或更改name的值,一开始没有定义name属性但是访问name时会由get方法,返回_name的值,更改name的属性,会利用set方法,变通的修改_name的值,好像一种障眼法。读取和修改的属性name其实都是另一个属性_name的值,而name这个属性有点像一个‘傀儡’,真正的核心属性竟然是_name。

    当要定义多个属性时:就要使用Object.definePropertyies(person,{

    _year:{//数据属性

          value:2020

    },

    name:{//数据属性

          value:'Nicholas'

    },

    edition:{//访问器属性

    get:function(){return this._year},

    set:function(value){this._year = value}

    }

    })

    3:以上是给对象属性设置属性,读取设置的属性可以使用:Object.getOwnPropertyDescriptor(person,'name'),该值返回一个对象,对象中包含了数据属性和访问属性,依次读取对象中的属性设置:

    let descriptor = Object.getOwnPropertyDescriptor(person,,'name')

    descriptor.configurable// 读取设置的configurable属性,查看下name属性是否可以通过delete删除,是否可修改

    以上认识了什么是对象,对象怎么建立,和对象中的属性可以怎么管理,有什么特性。就让我们更深入的理解了对象的含义。就像对象的数据属性,不是每个属性都是千篇一律的用来存一下数据值,你可以通过修改writable属性,不准修改它,也不是所有的属性值都能访问的,如果你把enumerable属性设置为false,那这个值你在for-in循环遍历时就访问不到了;抑或是有个属性值不想被外界直接访问到,可以通过定义一个‘傀儡’属性,让外界间接的访问到该属性等等。

    从有关属性的属性描述中,我们更能了解到,组成一个对象的不仅仅是只有属性成员,还有对每个成员属性的设置,犹如洋葱一般,拨开对象的外衣,内部的结构是由这些属性描述进行修饰的。

    相关文章

      网友评论

          本文标题:步遥——面向对象设计程序

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