当前位置:Web前端 > javascript> 正文

JS中对象的属性

时间:2015-8-25类别:Web前端

JS中对象的属性

JS中对象的属性

一、JS中对象属性的定义

1、属性名称可以包含英文字符、数字(不能开头)、特殊符号(如:-、_、$等等)。但一般使用纯英文字符,在特殊情况下会添加-(横杠:-webkit-、-moz- )以及 _(下划线)。

2、若属性名称包含了-(横杠),属性访问方式只能采用'[ ]'中括号访问

 

  • 
    
    var o = {
    
        x: 1,
    
        y: 2,
    
        '-x': 3,
    
        '-showX': function () {
    
            alert(this.x);
    
        }
    
    }
    
    // o.-x; // 此访问方式会报异常
    
    console.log(o['-x']); // => 3 :读取带-(横杠)名称的属性,只能采用'[ ]'中括号访问方式
    
    o['-showX'](); // => 弹出1 :若方法名称带-(横杠),执行方式很别扭
    
    		
  •  

    二、属性的分类

     

    1、私有属性定义

    私有属性只能在构造函数内部定义与使用。

  •  
  • 
    function User(age){ 
    
    this.age=age; 
    
    var isChild=age<12; 
    
    this.isLittleChild=isChild; 
    
    } 
    
    var user=new User(15); 
    
    alert(user.isLittleChild);//正确的方式 
    
    alert(user.isChild);//报错:对象不支持此属性或方法 
    
    		
  •  

    2、实例属性

    (1)、prototype方式,语法格式:functionName.prototype.propertyName=value

    (2)、this方式,语法格式:this.propertyName=value,注意后面例子中this使用的位置

     

  • 
    function User(){ } 
    
    User.prototype.name=“user1”; 
    
    User.prototype.age=18; 
    
    var user=new User(); 
    
    alert(user.age); 
    
    
    ----------------------------
    
    function User(name,age,job){ 
    
    this.name=“user1”; 
    
    this.age=18; 
    
    this.job=job; 
    
    } 
    
    alert(user.age); 
    
    		
  •  

    3、类属性

    语法格式:functionName.propertyName=value

     

  • 
    function User(){ } 
    
    User.MAX_AGE=200; 
    
    User.MIN_AGE=0; 
    
    alert(User.MAX_AGE); 
    
    		
  •  

    三、属性的访问方式

     

    1、 ' . '点访问方式

    属性名称必须为一个标示符(静态字符串),不能为变量。

  • var o = {};
  • o.x = '1';
  •  
  • 2、' [ ] '中括号方法方式

    属性名称可以为一个静态字符串,也可以为一个变量。若为变量,访问的属性为变量表示的值。

  •  
  • 
    
    var o = { x: 1, y: 2 };
    
    console.log(o['x']); // => 1 :访问x属性
    
    var a = 'y';
    
    console.log(o[a]); // => 2 :访问的是y属性(变量a的值)
    
    		
  • 说明:若读取一个不存在的属性,将返回undefined。若设置一个对象不存在的属性,将会向对象添加此属性。

     

     

    四、对象的属性的删除

     

    语法:delete obj.propertyName 或者 delete obj[propertyName]

    说明:delete只能删除对象的自有属性,不能删除继承属性。

  •  
  • 
    
    var o = {};
    
    o.x = '1';
    
    console.log(o.x); // => 1
    
    delete o.x;
    
    console.log(o.x); // => undefined :访问不存在的属性,返回undefined
    
     
    
    o.constructor.prototype.y = '2'; // 在原型对象上添加一个y属性
    
    console.log(o.y); // => 2
    
    delete o.y; // 删除继承属性y
    
    console.log(o.y); // => 2 :还是可以访问继承属性y
    
    		
  •  

     

    五、属性的检测

     

    1、in 运算符

  •  
  • 
    
    function People(name) {
    
        this.name = name;
    
    }
    
    function Student(age) {
    
        this.age = age;
    
    }
    
    Student.prototype = new People(); // 设置Student的原型为People对象
    
     
    
    var s = new Student(22);
    
     
    
    console.log('age' in s); // => true :age为实例属性
    
    console.log('name' in s); // => true :name为继承属性
    
    console.log('address' in s); // => false :address不存在此对象呢,返回false
    
    		
  •  

    2、obj.hasOwnProperty(propertyName) 

    判断对象是否拥有一个指定名称的实例属性

  •  
  • 
    
    var Student = function (name) {
    
        this.name = name;
    
    };
    
    // 给Student的原型添加一个sayHello方法
    
    Student.prototype.sayHello = function () {
    
        alert('Hello,' + this.name);
    
    }
    
    // 给Student的原型添加一个age属性
    
    Student.prototype.age = '';
    
      
    
    var st = new Student('张三'); // 初始化对象st
    
    console.log(st.hasOwnProperty('name')); // => true :调用构造函数时,通过this.name附加到实例对象上
    
    console.log(st.hasOwnProperty('sayHello')); // => false :sayHello方法为原型上的成员
    
    console.log(st.hasOwnProperty('age')); // => false :age属性为原型上的成员
    
    		
  •  

    3、obj.propertyIsEnumerable(propertyName)

    判断指定名称的属性是否为实例属性并且是可枚举的

  •  
  • 
    
    var o = Object.create({}, {
    
        name: {
    
            value: 'tom',
    
            enumerable: true // 可枚举
    
        },
    
        age: {
    
            value: 22,
    
            enumerable: false // 不可枚举
    
        }
    
    });
    
     
    
    console.log(o.propertyIsEnumerable('name')); // => true :name为实例属性并且可枚举
    
    console.log(o.propertyIsEnumerable('age')); // => false :age为实例属性但不可枚举
    
     
    
    console.log(o.hasOwnProperty('age')); // => true :hasOwnProperty()方法只判断属性是否为实例属性
    
    				
  •  

     

    六、对象的属性的遍历

     

    1、for / in 语句块

  •  
  • 
    
    var po = { px: 1, py: 2 };
    
    var o = { x: 1, y: 2 };
    
    o.__proto__ = po; // 设置o的原型为po
    
    for (property in o) {
    
        console.log(property); // => 输出属性的名称:x、y、px、py
    
        console.log(o[property]); // => 采用中括号访问方式,输出属性的值
    
    }
    
    		
  •  

    2、Object.keys(obj) 

    返回一个数组,包含对象可枚举的实例属性名称

  •  
  • 
    
    var po = { px: 1, py: 2 };
    
    var o = { x: 1, y: 2 };
    
    o.__proto__ = po; // 设置o的原型为po
    
    var propertyArray = Object.keys(o); // => 返回一个包含了可枚举的实例属性名称的数组
    
    for (var i = 0, len = propertyArray.length; i < len; i++) {
    
        console.log(propertyArray[i]); // => 输出实例属性名称:x、y
    
    标签:
  • 上一篇下一篇

    猜您喜欢

    热门推荐