高阶javascript第一天:理解Object

一:创建对象的方式

(1):字面量创建.

(2):构造函数创建.

(3):自定义构造函数创建实例化对象.

//1.字面量创建
var person1 = {
    name: '小好'
};
//2.构造函数创建
var person2 = new Object();
person2.name = '小谷';
//3.自定义构造函数
function Person(name, age) {
    this.name = name;
    // 添加方法
    this.sayHello = function() {
        console.log('您好');
    }
};
 var p1 = new Person('小力', 18);

二:定义属性
(1)定义属性

在代码中可以随时为对象添加属性,也可以修改对象内属性的值.

var person1 = {
    name: '小好'
};
//给对象添加属性
person1.age = 23;

//修改属性的值
person1.name = '张小好';
console.log(person1.name);    
三:属性枚举(又叫遍历)
(1)使用for...in

默认状态下的对象,我们为它添加的属性都是可枚举的,此时我们就可以使用for...in循环遍历对象内的属性.

(2)使用Object.keys(对象名)

此方法会返回一个以传入对象身上的可以被枚举(遍历)的属性组成的数组,对象中所有可以被枚举的属性都会存放在这个数组中.

        function Person(name, age, gender) {
            // this  - 实例化对象
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.say = function () {
                console.log("yer night rain");
            };
        }
        var obj3 = new Person("张三", 19, "男");
        console.log(obj3);//Person {name: '张三', age: 19, gender: '男', say: ƒ}


        var rel = Object.keys(obj3);
        console.log(rel);// ['name', 'age', 'gender', 'say']
(3)使用Object.getOwnPrototypeNames(对象名)方法

该方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

        function Person(name, age, gender) {
            // this  - 实例化对象
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.say = function () {
                console.log("yer night rain");
            };
        }
        var obj3 = new Person("张三", 19, "男");


        var rel = Object.getOwnPropertyNames(obj3);
        console.log(rel);//['name', 'age', 'gender', 'say']
  • 参数:给定对象。

  • 返回值:在给定对象上找到的自身属性对应的字符串数组。

四:检查属性是否存在
(1)检测属性

由于对象的属性可以被随时随地被修改或删除,因此有时候我们需要检查对象的某个属性是否存在。那么通过in可以判断对象是否有这个属性.这个方法返回的值是一个布尔值.

        function Person(name {
            // this  - 实例化对象
            this.name = name;
            this.say = function () {
                console.log("yer night rain");
            };
        }
        var obj3 = new Person("张三");

        console.log('name' in obj3);//true
        console.log('age' in obj3);//false

五:删除属性:
(1)删除对象里的属性

我们可以随时给对象添加属性,也可以随时地删除属性。有的人可能会使用null值赋值给属性,这样并不能删除属性,仅仅是改变了属性的值。我们需要使用delete操作符将属性从对象中完全删除。

//赋值为undefined,但是属性仍然存在
obj.name = undefined;


//直接删除属性,不论有没有值
delete obj.name;
六:属性特征:
  • 1:通用特征:对象的属性的类型分两种:一种是数据属性,一个种是访问器属性。数据属性用来存储一个值,比如所上个例子中的name。访问器属性不包含值,而是定义了一个getset函数,当读取属性时,调用get函数,当写属性时,调用set函数。
var obj = {
	//数据属性
    _myname: '小好',
	//访问器属性
    get name(){
        console.log('get方法被调用了');
        return this._myname + '1111';
    },
    set name(value){
        console.log('set方法被调用了');
        this._myname = value;
    }
};
  • 2:定义属性:

通过赋值操作定义对象,添加的普通属性,注意:默认情况下都是可修改、可枚举、可配置的。

如果我们想改变属性的特征,可以使用Object.defineProperty()方法,该方法允许精确地添加或修改对象的属性,在遍历枚举对象属性时会被枚举到([for...in] 或 [Object.keys]方法)。

注意:默认情况下,使用 Object.defineProperty() 添加的属性值是不可修改,不可枚举,不可配置(删除和添加)。

//使用语法格式
Object.defineProperty(obj, prop, descriptor)

        var obj = {
            name: '艾比克泰德',
            age: 50,
            gender: '男'
        }
        Object.defineProperty(obj, 'gender', {
            configurable: true,
            enumerable: true,
            writable: true,
        })
        obj.gender = "女";
        console.log(obj)
  • 3:定义多个属性:定义单个属性的内部特性使用Object.defineProperty(),定义多个属性使用的是Object.defineProperties(),这个方法接受2个参数,第一个是属性所属的对象,第二个是包含被定义属性的对象。
var obj = {
    _age: 2
};
Object.defineProperties(obj, {
    name: {
        configurable: false,
        writable: true,
        value: '康德'
    },
    age: {
        get: function () {
            return this._age; 
        },
        set: function (newValue) {
            if (newValue > 5) {
                this._age += newValue;
            } else {
                this._age = newValue;
            }
        }
    }
});
  • 4:获取属性特征:

    方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性

    获取属性的内部特性的方法有两个:Object.getOwnPropertyDescriptor(obj, prop)Object.getOwnPropertyDescriptors(obj)

(1).Object.getOwnPropertyDescriptor(obj, prop)

参数

obj : 目标所在的对象。

prop : 要获取特性的属性。

2.Object.getOwnPropertyDescriptors(obj)

参数

obj : 要获取的目标对象。

返回值

所指定的对象的所有自身属性的特性描述符,如果没有任何自身属性则返回空对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值