ITPub博客

首页 > > > js对象属性

js对象属性

作者:u_c082adee8aec 时间:2019-12-20 14:13:21 0 删除 编辑

js面向对象定义

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

ECMA中有两种属性:数据属性和访问器属性。

1、数据属性

对象属性的默认特性(只为js引擎使用)包含:

[[Configurable]]:描述属性能否被修改,默认值true;

[[Enumberable]]:表示能否通过for-in循环属性,默认值true;

[[Writable]]:表示能否修改属性的值。默认值true;

[[Value]]:包含属性的数据值。默认值undefined;

  要修改属性默认的特性,必须使用Object.defineProperty()方法。

        var person = {};
        Object.defineProperty(person,"name",{
            writable:false,
            value:"zyl"
        });
        console.log(person.name);
        person.name = "zhang";
        console.log(person.name);


  显示的结果:第一个:zyl,第二个:zyl

  说明person对象的属性name是一个只读的属性。

  在调用Object.defineProperty时,如果不置顶特性描述,则默认都为true。

  Object.defineProperty不常用,可以用来理解javascript对象。

注意:ie8是第一个实现该方法的浏览器版本。但是,ie8只针对dom对象可用。建议不要使用!!

2.访问器属性

var book = {
            _year:2004,
                edit:1
        };
        Object.defineProperty(book,"year",{
            get:function(){
                return this._year;
            },
            set:function(newValue){
                if(newValue>2004){
                    this._year = newValue;
                    this.edit += newValue -2004;
                }
            }
        });
        book.year = 2005;
        console.log(book._year);//2005
        console.log(book.year);//2005
        console.log(len(book));//2    year不是book的真实属性,是访问器属性
        console.log(book.edit);//2
        function len(obj){
            var flag = 0
            for(var i in obj){
                flag++;
            }
            return flag;
        }






来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69942394/viewspace-3158781/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-01

  • 博文量
    8
  • 访问量
    0