新建对象最原始的方法:
var obj = new Object();// == var obj = {}QS3易塔云建站-模板下载,web开发资源,技术博客
obj.name = "red";QS3易塔云建站-模板下载,web开发资源,技术博客
obj.job = "Software Engineer";QS3易塔云建站-模板下载,web开发资源,技术博客
obj.sayHey = function(){QS3易塔云建站-模板下载,web开发资源,技术博客
alert("大家好,我的名字是:" + this.name + "!");QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(obj);QS3易塔云建站-模板下载,web开发资源,技术博客
obj.sayHey();
后来演变为对象字面量形式:
var obj = {QS3易塔云建站-模板下载,web开发资源,技术博客
name : "blue",QS3易塔云建站-模板下载,web开发资源,技术博客
job : "Software Engineer",QS3易塔云建站-模板下载,web开发资源,技术博客
sayHey : function(){QS3易塔云建站-模板下载,web开发资源,技术博客
alert("大家好,我的名字是:" + this.name + "!");QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
obj.sayHey();QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(obj);
js规定一些特性是为了实现JavaScript引擎用的。QS3易塔云建站-模板下载,web开发资源,技术博客
上面的[[Configurable]] [[Enumerable]] [[Writable]] [[value]]四个数据属性(前三),都将被默认设置为了true,QS3易塔云建站-模板下载,web开发资源,技术博客
而[[value]]特性被设置为指定的值。QS3易塔云建站-模板下载,web开发资源,技术博客
修改默认数据属性特性的值,必须使用 Object.defineProperty()。QS3易塔云建站-模板下载,web开发资源,技术博客
语法:Object.defineProperty(要修改哪个obj,要修改哪个属性,描述符对象[1-3个描述符+value])。
var person = {};QS3易塔云建站-模板下载,web开发资源,技术博客
Object.defineProperty(person, "job", {QS3易塔云建站-模板下载,web开发资源,技术博客
writable : false,//Writable:是否可写。false:只读QS3易塔云建站-模板下载,web开发资源,技术博客
// configurable : true,//configurable:是否可删。false:不可删除。QS3易塔云建站-模板下载,web开发资源,技术博客
enumerable : true, //是否可枚举 for-inQS3易塔云建站-模板下载,web开发资源,技术博客
value : "Soft Engineer"QS3易塔云建站-模板下载,web开发资源,技术博客
})QS3易塔云建站-模板下载,web开发资源,技术博客
//是否可写QS3易塔云建站-模板下载,web开发资源,技术博客
alert(person.job)QS3易塔云建站-模板下载,web开发资源,技术博客
person.job = "aaaa"QS3易塔云建站-模板下载,web开发资源,技术博客
alert(person.job)//also hahahahQS3易塔云建站-模板下载,web开发资源,技术博客
//是否可删QS3易塔云建站-模板下载,web开发资源,技术博客
delete person.job;QS3易塔云建站-模板下载,web开发资源,技术博客
alert(person.job)QS3易塔云建站-模板下载,web开发资源,技术博客
//for in 循环 是否可以返回属性QS3易塔云建站-模板下载,web开发资源,技术博客
for(var i in person){QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(person[i])QS3易塔云建站-模板下载,web开发资源,技术博客
}
访问器属性:访问某个对象中,某个数据属性。
var book = {QS3易塔云建站-模板下载,web开发资源,技术博客
_year : 2004,QS3易塔云建站-模板下载,web开发资源,技术博客
edition: 1QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
Object.defineProperty(book,"year",{//year属性并未使用在对象方法内部QS3易塔云建站-模板下载,web开发资源,技术博客
get : function(){QS3易塔云建站-模板下载,web开发资源,技术博客
return this._year;//在对象方法内部-数据属性,常用标记前缀_QS3易塔云建站-模板下载,web开发资源,技术博客
},QS3易塔云建站-模板下载,web开发资源,技术博客
set : function(newValue){QS3易塔云建站-模板下载,web开发资源,技术博客
if(newValue > 2014){QS3易塔云建站-模板下载,web开发资源,技术博客
this._year = newValue;QS3易塔云建站-模板下载,web开发资源,技术博客
this.edition = newValue - 2004QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
});QS3易塔云建站-模板下载,web开发资源,技术博客
book.year = 2015;//在外部调用year属性,都不变QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(book.edition)
一次定义多个属性:
var book = new Object();QS3易塔云建站-模板下载,web开发资源,技术博客
Object.defineProperties(book,{QS3易塔云建站-模板下载,web开发资源,技术博客
_year : {//一个数据属性QS3易塔云建站-模板下载,web开发资源,技术博客
writable : true,QS3易塔云建站-模板下载,web开发资源,技术博客
value : 2004QS3易塔云建站-模板下载,web开发资源,技术博客
},QS3易塔云建站-模板下载,web开发资源,技术博客
edition : {//一个数据属性QS3易塔云建站-模板下载,web开发资源,技术博客
writable : true,QS3易塔云建站-模板下载,web开发资源,技术博客
value : 2QS3易塔云建站-模板下载,web开发资源,技术博客
},QS3易塔云建站-模板下载,web开发资源,技术博客
year : {//一个访问器属性,访问数据属性 _yearQS3易塔云建站-模板下载,web开发资源,技术博客
get : function(){QS3易塔云建站-模板下载,web开发资源,技术博客
return this._year;QS3易塔云建站-模板下载,web开发资源,技术博客
},QS3易塔云建站-模板下载,web开发资源,技术博客
set : function(newValue){QS3易塔云建站-模板下载,web开发资源,技术博客
if(newValue > 2004){QS3易塔云建站-模板下载,web开发资源,技术博客
this._year = newValue;QS3易塔云建站-模板下载,web开发资源,技术博客
this.edition += newValue - 2004;QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
}QS3易塔云建站-模板下载,web开发资源,技术博客
});QS3易塔云建站-模板下载,web开发资源,技术博客
book.year = 2008;
读取属性的特性:getOwnPropertyDescriptor(obj,"属性")
/*返回一个对象:*/QS3易塔云建站-模板下载,web开发资源,技术博客
var descriptor1 = Object.getOwnPropertyDescriptor(book,"year");QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(descriptor1);//year是一个访问器属性QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(descriptor1.configurable);//falseQS3易塔云建站-模板下载,web开发资源,技术博客
var descriptor2 = Object.getOwnPropertyDescriptor(book,"_year");QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(descriptor2);//_year是一个数据属性QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(descriptor2.value);//2008QS3易塔云建站-模板下载,web开发资源,技术博客
var descriptor3 = Object.getOwnPropertyDescriptor(book,"edition");QS3易塔云建站-模板下载,web开发资源,技术博客
console.log(descriptor3.value);//6