JavaScript对象属性的特性高级功能

“use strict”
/创建一个对象最简单的方式:创建一个Object的实例,然后再为它添加属性和方法/
var person = new Object();
person.name = “Hongbin”;
person.age = 21;
person.job = “students”;
person.say = function () {
console.log("Hi! I am "+this.name);
};
//后来 对象字面量 成为创建这种对象的首选模式。用对象字面量语法写上述代码:
var person = {
name:“Hongbin”,
age:21,
job:“students”,
say:function () {
console.log("Hi! I am "+this.name)
}
};
//对象有数据属性,数据属性有4个描述其行为的特性(特性是内布置,按照ECMA-262规范,要把它们放入两对方括号中[[xxx]])
/*
* [[Configurable]]:能否删除属性,能否修改属性的特性,能否把属性修改为访问器属性,像上述对象的属性Configurable默认为true
*
* [[Enumerable]]:能否通过for-in循环返回属性,像上述例子默认为true
*
* [[Writable]]:表示能否修改属性的值。向上面可以直接给属性值,该属性就为true
*
* [[Value]]:包含这个属性的数据值。读取数据值的时候,从这个位置读;写入属性值时,把新值保存在这个位置,默认为undefined;例如上述name:“Hongbin”,"Hongbin"就是name属性的值就是[[Value]],没有给他值就是undefined;
*
* 要使用它们,即要修改属性默认特性必须使用ECMAScript5的Object.defineProperty()方法,该方法要传三个参数:(属性所在的对象,属性的名字,描述符对象)。描述符对象即configurable,enumerable,writable,value。可以同时设置多个特性,将第三个参数传一个{xxx:xxx,xxx:xxx}进去即可,要注意的是使用该方法后不声明configurable,enumerable,writable特性默认都为false。
* */
//举个例子:
var dog = {};//创建一个小狗对象
Object.defineProperty(dog,“name”,{
value:“xiaoxiaobin”,//设置小狗的名字为xxx
writable:false//name属性的值是只读的,不可以被修改,如果对name赋值,在非严格模式下,会被忽略,在严格模式下会抛出错误。
});
console.log(dog);
dog.name = “tiger”;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

<script>
    //"use strict";
    /*创建一个对象最简单的方式:创建一个Object的实例,然后再为它添加属性和方法*/
    var person = new Object();
    person.name = "Hongbin";
    person.age = 21;
    person.job = "students";
    person.say = function () {
        console.log("Hi! I am "+this.name);
    };
    //后来 对象字面量 成为创建这种对象的首选模式。用对象字面量语法写上述代码:
    var person = {
        name:"Hongbin",
        age:21,
        job:"students",

        say:function () {
            console.log("Hi! I am "+this.name)
        }
    };
    //对象有数据属性,数据属性有4个描述其行为的特性(特性是内布置,按照ECMA-262规范,要把它们放入两对方括号中[[xxx]])
    /*
    * [[Configurable]]:能否删除属性,能否修改属性的特性,能否把属性修改为访问器属性,像上述对象的属性Configurable默认为true
    *
    * [[Enumerable]]:能否通过for-in循环返回属性,像上述例子默认为true
    *
    * [[Writable]]:表示能否修改属性的值。向上面可以直接给属性值,该属性就为true
    *
    * [[Value]]:包含这个属性的数据值。读取数据值的时候,从这个位置读;写入属性值时,把新值保存在这个位置,默认为undefined;例如上述name:"Hongbin","Hongbin"就是name属性的值就是[[Value]],没有给他值就是undefined;
    *
    * 要使用它们,即要修改属性默认特性必须使用ECMAScript5的Object.defineProperty()方法,该方法要传三个参数:(属性所在的对象,属性的名字,描述符对象)。描述符对象即configurable,enumerable,writable,value。可以同时设置多个特性,将第三个参数传一个{xxx:xxx,xxx:xxx}进去即可,要注意的是使用该方法后不声明configurable,enumerable,writable特性默认都为false。
    * */
    //举个例子:
    var dog = {};//创建一个小狗对象
    Object.defineProperty(dog,"name",{
        value:"xiaoxiaobin",//设置小狗的名字为xxx
        writable:false//name属性的值是只读的,不可以被修改,如果对name赋值,在非严格模式下,会被忽略,在严格模式下会抛出错误。
        ,configurable:true//设置name属性为可删除
    });

    // dog.name = "tiger";//无法修改,严格模式下报错
    Object.defineProperty(dog,"age",{
        value:2,//age:2
        configurable:false//该属性不能从对象中删除,严格模式下删除抛出错误
    });

    // delete dog.age;
    delete dog.name;
    console.log(dog);

</script>

多数形况下可能没必要用到Object.defineProperty()方法提供的这些高级功能。不过作为了解还是好的,可以加深对JavaScript对象的概念理解。

发布了37 篇原创文章 · 获赞 43 · 访问量 4916

猜你喜欢

转载自blog.csdn.net/printf_hello/article/details/104234830