javascript 学习总结(八)属性定义方法

1、defineProperty

/*
            定义(Definition).定义属性需要使用相应的函数,比如:
            Object.defineProperty(obj, "prop", propDesc)
            如果obj没有prop这个自身属性,则该函数的作用是给obj添加一个自身属性prop并赋值,
            参数propDesc指定了该属性拥有的特性(可写性,可枚举性等).
            如果obj已经有了prop这个自身属性,则该函数的作用是修改这个已有属性的特性,当然也包括它的属性值.
        */
        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

2、__defineSetter__ 和 __defineGetter__

        var book = {
            _year: 2004,
            edition: 1
        };
          
        //legacy accessor support
        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);   //2

参考网址:

[译]JavaScript中的属性:定义和赋值的区别

http://www.cnblogs.com/ziyunfei/archive/2012/10/31/2738728.html

原文地址:https://www.cnblogs.com/shizhouyu/p/4929272.html