• 面向对象的程序设计


     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>

  • 相关阅读:
    自制DEV皮肤
    网格系统,菜单、按钮及导航
    表单
    排版
    Bootstrap的HTML标准模板
    ecshop常用的修改内容
    删除ECSHOP后台左侧导航菜单
    dede 内容页文章标题显示不全的更改方法
    dede 鼠标移到标题处显示完整标题
    Artlist标签去掉table
  • 原文地址:https://www.cnblogs.com/meiqiyuanzi/p/7477940.html
Copyright © 2020-2023  润新知