JavaScript学习笔记(十二)——object 的静态方法

静态方法

什么是静态方法?静态方法就是直接使用类名调用的方法。

例如:Date.now( );比如Object.getOwnPropertyNames(obj),obj是一个对象,且静态方法是无法被子类继承或者实例对象拥有的,

object 的静态方法:

  1. 1、Object.getPrototypeOf(obj)

    获得obj的原型,也可以使用obj._ proto__属性获得obj的原型:

  2. 2、Object.getOwnPropertyNames(obj)

    可以将obj的可枚举和不可枚举的属性的名称组成一个数组返回,

    var obj = {
        o1: 'hello',
        o2: [1, 23, [3, 2]],
        o3: null
    };
    var re = Object.getOwnPropertyNames(obj);
    console.log(re);
    
  3. 3、Object.keys(obj)

    将对象里面的成员遍历出来返回一个数组;和上面那个方法类似;

    var obj = {
        o1: 'hello',
        o2: [1, 23, [3, 2]],
        o3: null
    };
    var re = Object.keys(obj);
    console.log(re);
    

    结果:在这里插入图片描述

  4. 4、Object.values(obj)

    取出对象成员中的全部value值,返回一个数组;对象转数组可以用这个方法。

    var obj = {
        o1: 'hello',
        o2: [1, 23, [3, 2]],
        o3: null
    };
    var re = Object.values(obj);
    console.log(re);
    

    结果:在这里插入图片描述

  5. 5、Object.defineProperty(obj,propName,desc)

    该方法可以为obj新增一个名为propName的属性,同时它的属性定义为desc,desc使用一个对象赋值,也就是说(详细定义对象成员:给哪个对象定义,它的成员是什么,成员值是什么,可不可写?可不可读?默认值是什么?)例如:

    Object.defineProperty(Product.prototype,"a",{
        value: "a",
        writable: true,
        enumerable : true,
        configurable : true
    });
    

    **解释:**以上就为Product的prototype新增了一个名为a的属性,设置它的值为a,可写,可枚举,可更改(可更改的意思是否可更改writable、enumerable等),默认都为true。

    上面的例子为Product.prototype增加了属性a,那么它所有新的实例对象都会增加这个属性。当然obj本省也可以是实例对象。使用这种方式定义一个新属性,可以自主控制属性的表现方式,如果将writable设置为false,这个属性将不可更改,

    例如:将属性a的writable设置为了false,然后更改它的值,虽然没有报错,但是它确实没有被更改,如果在 use strict 模式下,将抛出错误。

    • set和get,对自己存值和取值的代码输出进行设置,也就是说自己指定对象.语法的使用输出。
    var obj = {};
    Object.defineProperty(obj, 'age', {
        set(arg) {
            console.log(arg, 666666);
            temp=arg;
        },
        get() {
            return temp+'岁';
        }
    })
    
    obj.age = 18; //存值的时候走到set里面去,执行你设置的代码输出
    console.log(obj.age); //取值的时候走到get里面去,执行你设置的代码输出
    

    结果:在这里插入图片描述

  6. 6、Object.create(proto,[props])

    以proto为原型,新建一个实例对象(创建一个对象给他指定原型对象),同时将props定义的属性设置给这个新对象,以这种方式新建的对象都是Object类型,例如:

    工厂函数:

    var o = Object.create(Product.prototype,{
        size : {
            value : 7,
            writable : false,
            enumerable : true,
            configurable : false
        }
    });
    
    

    使用create方法新建一个实例对象o,它的父类是Product,它本身属于Object,同时设置size为只读属性。注意这种方式不是使用Product的构造函数新建的实例对象,所以o并没有name、desc等属性。

  7. 7、Object.getOwnPropertyDescriptor(obj,propName)

    返回obj的属性propName的属性描述符:

    如上面新建的实例对象o,获得它的属性size的属性描述符。

  8. 8、Object.preventExtensions(obj)

    可以禁止obj对象的属性扩展,例如:

    将实例对象o设置为不可扩展,那么即时给它一个新属性name没有报错,但这个name属性并没有添加到它的定义中。同时size属性的configurable如果设置为true的话,可以使用delete o.size 删除size属性。注意没有preventExtensible的反相操作。

  9. 9、Object.seal(obj)

    可以禁止obj对象的属性扩展和删除,它相对与preventExtensible方法而言 ,将所有属性的configurable属性设置为false。

  10. 10、Object.freeze(obj)

    可以禁止对obj的所有操作,它相对与preventExtensible方法而言,将属性的configurable属性和writable属性都设置为了false,例如:如上,实例对象o将不可扩展,属性不可删除,不可更改。

  11. 11、Object.isExtensible(obj)、Object.isSealed(obj)、Object.isFrozen(obj)

    分别对应了上述三个方法是否对obj进行了设置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值