JavaScript_笔记10 数据属性和访问器属性

创建对象

创建一个对象:new操作符+Object()创建一个Object实例,并且为它添加属性和方法。

var people = new Object();
people.name = 'kabukiyo';
people.age = 12;
people.job = "engineer";
people.sayName = function(){
    
    
	alert(this.name);
}

字面量表示法:

var people ={
    
    
	name:"kabukiyo",
	age:12,
	job:"engineer",
	sayName:function(){
    
    
		alert(this.name);
	}
}

数据属性、访问器属性

ECMAScript有两种属性:数据属性和访问器属性。

数据属性的4个特性

  1. [[Configurable]] : 表示能否通过delete删除属性从而重新定义属性;表示能否修改数据属性的特性;表示能否把数据属性修改为访问器属性。
  2. [[Enumerable]] :表示能否通过for-in循环返回属性;
  3. [[Writable]] :表示能否修改属性的值;
  4. [[Value]] :包含这个属性的数据值。默认是undefined

注意:若像上面那样定义一个对象,那么它的数据属性的[[Configurable]],[[Enumerable]],[[Writable]]特性都被设置为true,[[Value]]就被设置为指定的值。

Object.defineProperty()修改属性的特性

Object.defineProperty()接手3个参数:属性所在的对象,属性的名字和一个描述符对象(descriptor)。其中描述符对象的属性必须是configurable、enumerable、writable、value。通过Object.defineProperty()可以修改某个对象的某个属性的特性的值。

例1:

var people = {
    
    };
Object.defineProperty(people,'name',{
    
    
	writable:false,
	value:"kabukiyo"
});
alert(people.name);   //kabukiyo
people.name = "hua";
alert(people.name);	  //kabukiyo

上述代码描述为:为people对象创建了一个name属性,它的值为kabukiyo,而且这个值是不可写,只可读的。如果在严格模式下,会抛出错误,因为name属性是不可写的;如果在非严格模式下,赋值操作则被忽略。

例2:

var people = {
    
    };
Object.defineProperty(people,'name',{
    
    
	configurable:false,
	value:"kabukiyo"
});
alert(people.name);   //kabukiyo
delete people.name;
alert(people.name);	  //kabukiyo

说明:为people对象创建了一个name属性,值为kabukiyo,且它是不可配置的。即name属性不可以被delete删除,不能变成访问器属性,其特性不能被修改。故严格模式下对delete会出现错误,非严格模式下则忽略。
注意:

二级目录

三级目录

猜你喜欢

转载自blog.csdn.net/qq_43263320/article/details/114276235