zoukankan      html  css  js  c++  java
  • 面向对象的程序设计

     1.Value的值为只读的(defineProperty.规定属性,):

    <script>

    var person={};
    Object.defineProperty(person,"name",{
        writable: flase,          //如果这里改为true,则第二个弹出框则为Grey
        value:"Nicholas"
    });
        
    alert(person.name);      //Nicholas
    person.name="Grey";
    alert(person.name);      //Nicholas

    </script>

     2.把configurable设为false,标书不能从对象中删除属性:

    <script>

    var person={};
    Object.defineProperty(person,"name",{
        configurable: false,
        value:"Nicholas"
    });
        
    alert(person.name);
    delete person.name;
    alert(person.name);

    </script>

    在调用Object.defineProperty()方法修改除writable之外的的特性,都会导致错误。也就是说,可以多次调用Object.defineProperty()方法修改同一属性,但在把configurable特性设置为false之后就会有限制了。

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

    3.理解对象-访问器属性(P141)

    <script>

    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;
    alert(book.edition);        //2

    </script>

    以上代码创建了一个book对象,并给它定义两个默认的属性:_year和edition._year前面的下划线是一种常用的标记,用于表示只能通过对象方法访问的属性。二访问器属性year则包含一个getter函数和一个setter函数。getter函数返回_year的值,setter函数通过计算来确定正确的版本。因此,把year属性修改为2005会导致_year变成2005,而edition变为2.

    定义访问器的旧有方法:

    <script>
    var book={
        _year:2004,
        edition:1
    };
        
    book.__defineGetter__("year",function(){
        return this._year;
    });
        
    book.__defineSetter__("year",function(newValue){
        if(newValue>2004){
            this._year=newValue;
            this.edition+=newValue-2004;
        }
    });
        
    book.year=2005;
    alert(book.edition)
    </script>

    在不支持Object.defineProperty()方法的浏览器中不能修改[[Configurable]]和[[Enumerable]].

    定义多个属性:

    <script>
    var book={};
        
    Object.defineProperties(book,{
        _year:{
            value:2004
        },
        
        edition:{
            value:1
        },
        
        year:{
            get:function(){
                return this._year;
            },
            set:function(newValue){
                if(newValue>2004){
                this._year=newValue;
                this.edition+=newValue-2004;
                }
            }
        }
    });
        
    var descriptor=Object.getOwnPropertyDescriptor(book,"_year");
    alert(descriptor.value)           //2004
    alert(descriptor.configurable);   //false
    alert(typeof descriptor.get);     //"undefined"
        
    var descriptor=Object.getOwnPropertyDescriptor(book,"year")
    alert(descriptor.value);          //undefined
    alert(descriptor.enumerable);     //false
    alert(typeof descriptor.get);     //"function"
    </script>

  • 相关阅读:
    django的json返回值带有汉字的处理
    easyui datagrid插件对返回数据的预处理
    easyui checkbox
    江西师大教育技术学硕士研究生培养方向介绍
    杯水人生
    成员管理及membership
    一份网络教育应用试题
    国外十大搜索引擎
    本科生毕业论文格式结构
    FCKeditor配置参考文章
  • 原文地址:https://www.cnblogs.com/meiqiyuanzi/p/7477940.html
Copyright © 2011-2022 走看看