标签:function table 方式 new 调用 简单 style 决定 例子
1 var person = new Object(); 2 person.name = "Nicholas"; 3 person.age = 29; 4 person.job = "Software Engineer"; 5 person.sayName = function(){ 6 alert(this.name); 7 };
上面是早期写法,现在对象字面量成为创建这种对象的首选模式。前面的例子可以表示如下。
1 var person = { 2 name: "Nicholas", 3 age: 29, 4 job:"Software Engineer", 5 sayName: function(){ 6 alert(this.name); 7 } 8 };
一、属性类型
ECMAScript中有两种属性:数据属性和访问器属性。
1、数据属性
数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个可以描述其行为的特性。
var person = {};
Object.defineProperty(person, "name", {
configurable: false, //禁止修改
value: "Nicholas"
});
console.log(person.name); //Nicholas
delete person.name; //严格模式下会抛出错误。
console.log(person.name); //Nicholas
var book = { _year: 2004, edition: 1 }; //创建book对象,并定义两个属性。_year前面的下划线是一种常用的记号,用于表示只能通过对象方法访问的属性。
get: function(){
return this._year;
},
set: function(newValue){
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005; //把year属性修改为2005会导致_year变成2005,而edition变为2。
alert(book.edition); //2
上面例子是使用访问器属性的常见方式,即设置一个属性的值会导致其他属性发生变化。
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function(){
return this._year;
},
set: function(newValue){
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
}); //book对象上定义了两个数据属性(_year和edition)和一个访问器属性(year)。
三、读取属性的特性
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function(){
return this._year;
},
set: function(newValue){
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
console.log(descriptor); //{configurable: false, enumerable: false, value: 2004, writable: false}
alert(descriptor.value); //2004
alert(descriptor.configurable); //false
alert(typeof descriptor.get); //"undefined"
var descriptor = Object.getOwnPropertyDescriptor(book, "year");
console.log(descriptor); //{configurable: false, enumerable: false}
alert(descriptor.value); //undefined
alert(descriptor.enumerable); //false
alert(typeof descriptor.get); //"function"
对于数据属性_year,value等于最初的值,configurable是false,而get等于undefined。
对于访问器属性year,value等于undefined,enumerable是false,而get是一个指向getter函数的指针。
attention:在JavaScript中,可以针对任何对象——包括DOM和BOM对象,使用Object.getOwnProperty-Descriptor()方法。支持这个方法的浏览器有IE9+、Firefox 4+、Safari 5+、Opera 12+和Chrome。
标签:function table 方式 new 调用 简单 style 决定 例子
原文地址:http://www.cnblogs.com/wangyongshf/p/6885127.html