• js学习笔记(一)对象的属性


    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;
            }
  • 相关阅读:
    JNday7-pm
    JNday7-am
    bzoj1047理想的正方形
    关于OI中简单的常数优化
    bzoj1050旅行
    bzoj1044木棍分割
    bzoj1875 HH去散步
    bzoj1059矩阵游戏
    bzoj2705Longge的问题
    bzoj1833数字计数
  • 原文地址:https://www.cnblogs.com/zhangyanlei183/p/5017006.html
Copyright © 2020-2023  润新知