JavaScript中的Object静态方法

1、静态方法

定义

静态方法就是直接使用类名调用的方法,比如Object.getOwnPropertyNames(obj),obj是一个对象,且静态方法是无法被子类继承或者实例对象拥有的,

2、Object类的静态方法

①Object.getPrototypeOf()

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

        function fn() {
        }
        fn.prototype = [1, 2, 3]
        var re = new fn()
        var re1 = Object.getPrototypeOf(re)
        console.log(re1);

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

②Object.defineProperty(obj,propName,desc)

该方法可以为obj新增一个名为propName的属性,同时它的属性定义为desc,desc使用一个对象赋值,例如:

        var obj = {}
        Object.defineProperty(obj, "a", {
            value: "lalala",
            wirtable: true, //是否可写
            enumerable: true, //是否可枚举
            configurable: false, //是否可删除
            // set() {},
            // get() {} //value  和get与set只能选一个
        });
        console.log(obj.a, 111);
        // wirtable
        obj.a = 100 //不可写 但是不会报错
        console.log(obj.a, 222);

        //enumerable
        for (let key in obj) {
            console.log(key, obj[key], 333);
        }
        //onfigurable
        delete obj.a
        console.log(obj.a, 444);

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

③Object.create(proto,[props])

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

var obj = {
            name: "karen"
        }
        var f1 = Object.create(obj, {
            life: {
                value: 7
            }
        })
        console.log(f1, f1.name);

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

④Object.getOwnPropertyDescriptor(obj,propName)

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

        var obj = {
            name: "karen"
        }
        var f1 = Object.create(obj, {
            life: {
                value: "lalala",
                wirtable: true, //是否可写
                enumerable: true, //是否可枚举
                configurable: true, //是否可删除
            }
        })
        console.log(f1);
        var re = Object.getOwnPropertyDescriptor(f1, "life")
        console.log(re);

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

⑤Object.preventExtensions()

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

      var obj = {
			hqyj: 100
		}
		var re = Object.preventExtensions(obj)
		console.log(re, re === obj)
		obj.age = 200
		console.log(obj, obj.age)

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

⑥ Object.seal()

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

	   var obj = {
			hqyj: 100
		}
		var re = Object.seal(obj)
		delete obj.hqyj
		console.log(obj)

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

⑦Object.freeze()
	    var obj = {
			hqyj: 100
		}
		var re = Object.freeze(obj)
		delete obj.hqyj
		obj.hqyj = 300
		console.log(obj.hqyj)//100

⑧Object.isExtensible(obj)、Object.isSealed(obj)、Object.isFrozen(obj)
   var obj = {
			hqyj: 100
		}
		var re = Object.isExtensible(obj) //Object.freeze(obj)
		// delete obj.hqyj
		obj.hqyj = 300
		console.log(obj.hqyj, Object.isFrozen(obj), Object.isSealed(obj), Object.isExtensible(obj))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值