建立javascript对象能够经过两种方式:建立Object对象和建立字面量对象。javascript
-
/**
-
* 面向对象
-
*/
-
-
/** 建立对象 **/
-
var person = new Object();
-
person.name = "Nicholas";
-
person.age = 29;
-
person.job = "Soft Engineer";
-
-
person.sayName = function() {
-
console.log(this.name);
-
};
-
-
/** 字面量方式 **/
-
var person1 = {
-
name: "Nicholas",
-
age: 29,
-
job: "Soft Engineer",
-
-
sayName: function() {
-
console.log(this.name);
-
}
-
};
Javascript 对象属性的特性 java
对象的属性特性,能够经过Object.defineProperty(object, property, descritor)设置:this
-
//"use strict"; //严格模式
-
/**
-
* 面向对象 - 对象属性的数据属性
-
* 数据属性包含一个数据值的位置,在这个位置能够读取和写入值,数据属性4个特性: Configurable, Enumerable, Writable, Value 。
-
* Configurableb 表示是否能修改属性的其它特性,或使用delete删除属性,默认为true。
-
* Enumerable 是否能经过for in 循环列举出对象的该属性,默认true。
-
* Writable 可否修改属性的值(也便是下面的Value值),默认true。
-
* Value 表示属性的数据值,默认是undefined(未赋值)
-
*/
-
-
// 建立一个对象
-
var person = {
-
name: "Nicholas"
-
};
-
-
/**
-
* 上面建立了一个名称为person的对象,属性name的4个特性:Configurable(true),Enumerable(true), Writable(true), Value("Nicholas")。
-
*/
-
-
/**
-
* 修改属性的默认特性,Object.defineProperty(obj, propertyName, descObj)
-
* 接受3个参数:属性所在对象,属性名,属性特性描述符对象,以下
-
*/
-
-
Object.defineProperty(person, "name", {
-
writable: false, // 是否能修改name属性,false 便是只读状态
-
value: "Nick"
-
});
-
-
console.log(person.name); //Nick
-
-
//属性特性writable设置为false,这里没法修改name属性的值,严格模式下会抛出不会出现报错。非严格模式会被忽略,name仍是Nick。
-
person.name = "James"; // 设置无效
-
-
console.log(person.name); // Nick
-
-
Object.defineProperty(person, "name", {
-
writable: true
-
});
-
-
person.name = "James";
-
console.log(person.name); //James
-
-
/**
-
* configurable 一旦将属性设置为false,将不能在设置为true
-
*/
-
-
Object.defineProperty(person, "name", {
-
configurable: false // 不能经过delete删除属性
-
});
-
// 抛出错误
-
/**
-
Object.defineProperty(person, "name", {
-
configurable: true
-
}); **/
-
-
delete person.name; // 非严格模式无效,严格模式抛错
-
console.log("name = " + person.name);
- set ,一旦属性被从新赋值,此方法被自动调用。
- get ,一旦属性被访问读取,此方法被自动调用。
-
var book = {
-
_year: 2004,
-
edeition: 1
-
};
-
-
// 定义属性year,用来访问_year
-
Object.defineProperty(book, "year", {
-
get: function() {
-
console.log("execute get");
-
return this._year;
-
},
-
set: function(newValue) {
-
console.log("execute set");
-
if (newValue > 2004) {
-
this._year = newValue;
-
this.edeition += newValue - 2004;
-
}
-
}
-
-
});
对象的属性特性:数值特性和访问器特性。数值特性configurable、enumerable、writable、value,表明值和状态。访问器特性没有值,只有一对方法get和set。对象