绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
js对象属性
2019-12-20 14:13:21

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;
        }






分享好友

分享这个小栈给你的朋友们,一起进步吧。

技术讨论一锅炖
创建时间:2019-12-04 17:50:11
技术炖一切,欢迎各路大牛来辩
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 山中老狐狸
    栈主
  • abc
    嘉宾
  • zyl
    嘉宾

小栈成员

查看更多
  • unnamed person1
  • ?
  • Giao
  • 浮生°
戳我,来吐槽~