zoukankan      html  css  js  c++  java
  • Object.defineProperty方法

    Object.defineProperty() (一次添加/修改一个属性)
    用法:Object.defineProperty(obj, prop, descriptor)
    方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
         var obj={name:"Jane"}
            Object.defineProperty(obj,'age',{
                value:"16",
                writable:true, //可重写
                enumerable:true, //可枚举
                configurable:true //可删除该属性(用到delete)
            })
            //writable:true的时候,obj.age重写可以成功
            obj.age=19
            for(var i in obj){
                console.log(i) 
            }
            console.log(Object.keys(obj)) //返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性
            delete obj.age //configurable:true 
            console.log(obj)
            
            //当使用存储性描述的时候,不能用的value和writable
            //如果不设置方法,则get和set的默认值是undefined
            var obj={name:"Jane"}
            var initVal = 16
            Object.defineProperty(obj,'age',{
                get:function(){
                    return initVal
                },
                set:function(newVal){
                    initVal = newVal
                },
                enumerable:true, //可枚举
                configurable:true //可删除该属性(用到delete)
            })
            //获取值
            console.log(obj.age) //16
            //设置值
            obj.age=20;
            console.log(obj.age) //20
    var obj={name:'Jane'}
    //Object.getOwnPropertyDescriptor方法,可查看属性特性的值 var aa = Object.getOwnPropertyDescriptor(obj,'name') console.log(aa)//{value: "Jane", writable: true, enumerable: true, configurable: true}

    通过对象字面量定义的属性,它的数据属性:writable,enumerable,configurable默认为true
     而通过Object.defineProperty定义的属性,它的数据属性:writable,enumerable,configurable默认为false

    Object.defineProperties()  (一次可以添加/修改一个或多个属性)
    Object.defineProperties(object, descriptors)
    将一个或多个属性添加到对象,并/或修改现有属性的特性。
    var obj = {name:'Jack'};
    Object.defineProperties(obj, { age:{ //这块同上面的例子,只不过属性名放在了下面 value:
    18 } })

    一次添加多个属性

        var obj = Object.defineProperties({}, {
                    age:{
                        value:18
                    },
                    name:{
                        value:'Jack'
                    },
                    gender:{
                        value:'male'
                    }
                })

    Object.setPrototypeOf()方法设置一个指定的对象的原型(即,内部[[Prototype]]属性)到另一个对象或null;

    语法:Object.setPrototypeOf(obj,prototype);

    obj:要设置其原型的对象

    prototype:该对象的新原型(一个对象或者null,如果参数不是一个对象或者null(例如,数字,字符串,boolean,或者undefined),则什么都不做

    Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。

    语法:Object.preventExtensions(obj)

    参数:obj 将要变得不可扩展的对象;返回值;已经不可扩展的对象;

    如果一个对象可以添加新的属性,则这个对象是可扩展的。Object.preventExtensions()将对象标记为不再可扩展,因此

    它将永远不会具有超出它标记为不可扩展的属性。注意,一般来说,不可扩展对象的属性可能仍然可被删除。尝试将新属性添加到不可扩展对象将静默失败或抛出异常TypeError(最常见但不排除其他情况,如在strict mode中)

    Object.preventExtensions()仅阻止添加自身的属性。但属性仍然可以添加到对象原型中。

    一旦使其不可扩展,就无法再对对象进行扩展。

    Object.hasOwnProperty()方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性,不包括该原型中的属性。

  • 相关阅读:
    Android牟利之道(四)如何推广你的产品,即你的APP
    android权限
    OpenGL 中文 API
    为何不能上网浏览网页 但是可以用QQ聊天
    安装任何软件都提示不能访问windows Installer服务
    初识WAP
    用asp.net 2.0实现网站二级域名(转)
    Visual Studio .NET已检测到指定的Web服务器运行的不是ASP.NET 1.1 版
    用EasyBoot轻松做启动光盘
    我心中的痛房子
  • 原文地址:https://www.cnblogs.com/xumqfaith/p/8662456.html
Copyright © 2011-2022 走看看