“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对象的概念理解。