美文网首页
面向对象的程序设计——理解对象

面向对象的程序设计——理解对象

作者: astak3 | 来源:发表于2018-04-23 22:22 被阅读0次

    面向对象的程序设计

    ECMA-262 把对象定义为:无须属性的集合,其属性可以包含基本值、对象或者函数。

    理解对象

    var person = new Object();      //创建对象
    person.name = "Nicholas";       //添加属性
    person.age = 29;
    person.job = "teacher";
    person.sayName = function(){    //添加方法,this 表示当前作用域下的对象;this 表示new Objecy() 实例化出来的那个对象;this 要放在一个作用域下,比如person.sayName()是person 下的方法,方法可用this 表示方法本身。
        alert(this.name);
    };
    

    属性类型

    ECMAScript 中有两种属性:数据属性和访问器属性,它们不能在JavaScript 中直接访问,规范把它们放在了两对[[]]中间,如:[[Enumerable]]。

    数据属性
    数据属性是包含一个数据值的属性,在这个位置可以读取和写入值。4个特性
    [[Configurable]]:表示能否通过delete删除属性、能否修改属性的特性,能否把属性修改为访问器属性。默认true
    [[Enumerable]:表示能通过for-in循环返回属性。默认true
    [[Writable]]:表示能否修改属性值。默认true
    [[Value]]:包含这个属性的数据值。默认undefined
    例:

    var person = {
        name: "Nicholas"        //[[Value]]的特性将这里设置为"Nicholas",对这个值的任何修改都讲反应在这里。
    };
    

    要修改默认特性,要使用Object.defineProperty()方法。接收三个参数:属性所在的对象,属性的名字和一个描述符对象。描述符对象必须是configurableenumerablewritablevalue
    例:

    var person = {};
    Object.defineProperty(person,"name",{       //person:属性所在的对象;name:属性名;花括号内是描述符对象
        writable: false,            //只读模式,true写入模式
        value: "Nicholas"
    });
    person.name = "zhangsan";
    alert(person.name);             //打印"Nicholas" 因为这边是只读模式
    

    在调用Object.defineProperty()时如果不指定configurableenumerablewritable,默认都是false

    访问器属性
    访问器属性不包含数据值,它们包含一对gettersetter函数。
    getter:读取访问器属性调用
    setter:写入访问器属性调用
    4个特性:
    [[Configurable]]:表示能否通过delete删除属性、能否修改属性的特性,能否把属性修改为访问器属性。默认true
    [[Enumerable]:表示能通过for-in循环返回属性。默认true
    [[getter]]:读取访问器属性调用,默认undefined
    [[setter]]:写入访问器属性调用,默认undefined

    相关文章

      网友评论

          本文标题:面向对象的程序设计——理解对象

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