Javascript进阶--面向对象之属性

一.属性的设置和获取

    1)通过.的形式设置和获取

设置:     对象.属性 = Value值  

获取:     var value = 对象.属性

例: var obj = {};

        obj.name = 'jack'; //属性设置

        console.log(ojb.name);  //属性获取

2)通过[]形式设置和获取

设置:     对象['属性'] = Value值 

获取:     var value = 对象['属性'] //[]内部传入字符串或者变量

例: var obj = {};

        obj['name'] = 'jack'; //属性设置

        console.log(ojb['name']);  //属性获取 

        console.log(ojb.name);  //也可通过.的形式获取属性   

二.属性的删除

deleted 对象.属性 或 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 运算符

var obj = {};

obj.name = 'jack';

console.log('name' in obj);  // true   注意此处'name'为字符串

console.log('age' in obj);  // false

2) 调用对象的hasOwnProperty()方法

var obj = {};

obj.name = 'jack'; 

console.log( obj.hasOwnProperty('name')); //true

3) 通过判断对象属性是否等于undefined

var obj ={};

obj.name = 'jack';

console.log(obj.name !== undefined) // true

注:== 不强制要求数据类型相等,===要求数据类型相等才认定为相等

    console.log(123 == '123');  //true

    console.log(123 === '123');  //false 

四.遍历属性

遍历对象可枚举的实例属性和继承属性

1)for/in语句块

语法:
for (p in items) {
    // 当items为对象时,p的值为对象的属性名称
    // 当items为数组时,p的值为数组的下标 0,1,2,……
}

示例:
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(ojb)

该方法返回一个数组,包含对象可枚举的实例属性名称(不包含继承属性

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
}

3)Object.getOwnPropertyNames(obj) 

方法返回一个数组,包含对象的所有实例属性名称。包括可枚举和不可枚举的(不包含继承属性

var po = { px: 1, py: 2 };
var o = { x: 1, y: 2 };
// 设置对象o的属性特性:属性x为可枚举,属性y为不可枚举
Object.defineProperties(o, {
    x: {
        enumerable: true
    },
    y: {
        enumerable: false
    }
});
o.__proto__ = po; // 设置o的原型为po 
// 1.Object.keys():获取一个可枚举的实例属性名称的数组
var propertyArray = Object.keys(o);
for (var i = 0, len = propertyArray.length; i < len; i++) {
    console.log(propertyArray[i]); // => 输出实例属性名称:x

// 2.Object.getOwnPropertyNames():获取一个包含的实例属性名称的数组,不管实例属性是否可枚举
propertyArray = Object.getOwnPropertyNames(o);
for (var i = 0, len = propertyArray.length; i < len; i++) {
    console.log(propertyArray[i]); // => 输出实例属性名称:x、y
}

参照

你可能感兴趣的:(Javascript进阶--面向对象之属性)