var obj = { x : 1, y : function () { return this.x + this.x; } }
var obj = {}; obj.x = 1; obj.y = function () { return this.x + this.x; }
Object.defineProperty(object, propertyname, descriptor);
引數說明如下:var obj = {}; Object.defineProperty(obj, "x", { value : 1, writable : true, enumerable : true, configurable : true }); console.log(obj.x); //1
object.defineProperties(object, descriptors);
引數說明如下:var obj = {}; Object.defineProperties(obj, { x : { //定義屬性x value : 1, writable : true, //可寫 }, y : { //定義屬性y set : function (x) { //設定存取器屬性 this.x = x; //改寫obj物件的x屬性的值 }, get : function () { //設定存取器 return this.x; }, } }); obj.y = 10; console.log(obj.x); //10
var obj = { //定義物件 x : 1 } console.log(obj.x); //存取物件屬性x,返回1 obj.x = 2; //重寫屬性值 console.log(obj.x); //存取物件屬性x,返回2
console.log(obj["x"]); //2 obj["x"] = 3; //重寫屬性值 console.log(obj["x"]); //3
for (var i in obj) { console.log(obj[i]); obj[i] = obj[i] + obj[i]; console.log(obj[i]); }在上面程式碼中,中括號中的表示式 i 是一個變數,其返回值為 for/in 遍歷物件時列舉的每個屬性名。
Object.getOwnPropertyNames(object);
引數 object 表示一個物件,返回值為一個陣列,其中包含所有私有屬性的名稱。其中包括可列舉的和不可列舉的屬性和方法的名稱。如果僅返回可列舉的屬性和方法的名稱,應該使用 Object.keys() 函數。var obj = {x : 1, y : 2, z : 3}; var arr = Object.getOwnPropertyNames(obj); console.log(arr); //返回屬性名:x,yz
Object.keys(object);
引數 object 表示指定的物件,可以是 JavaScript 物件或 DOM 物件。返回值是一個陣列,其中包含物件的可列舉屬性名稱。Object.getOwnPropertyDescriptor(object, propertyname);
引數 object 表示指定的物件,propertyname 表示屬性的名稱。返回值為屬性的描述符物件。var obj = {x : 1, y : 2, z : 3}; //定義物件 var des = Object.getOwnPropertyDescriptor(obj, "x"); //獲取屬性x的資料屬性描述符 for (var prop in des) { //遍歷屬性描述符物件 console.log(prop + ':' + des[prop]); //顯示特性值 } des.writable = false; //重寫特性,不允許修改屬性 des.value = 100; //重寫屬性值 Object.defineProperty(obj, "x", des); //使用修改後的資料屬性描述符覆蓋屬性x var des = Object.getOwnPropertyDescriptor(obj, "x"); //重新獲取屬性x的資料屬性描述符 for (var prop in des) { //遍歷屬性描述符物件 console.log(prop + ':' + des[prop]); //顯示特性值 }一旦為未命名的屬性賦值後,物件就會自動定義該屬性的名稱,在任何時候和位置為該屬性賦值,都不需要定義屬性,而只會重新設定它的值。如果讀取未定義的屬性,則返回值都是 undefined。
var obj = {x : 1}; //定義物件 delete obj.x; //刪除物件的屬性x console.log(obj.x); //返回undefined當刪除物件屬性之後,不是將該屬性值設定為 undefined,而是從物件中徹底清除屬性。如果使用 for/in 語句列舉物件屬性,只能列舉屬性值為 undefined 的屬性,但不會列舉已刪除屬性。
var obj = {}; obj.f = function (n) { //定義物件的方法 return 10 * n; } var n = obj.f(5); //呼叫方法,設定引數為5 console.log(n); //返回值50
var obj = { //定義物件 f : function () { //定義物件的方法 console.log(this); //存取當前物件 } } obj.f(); //此時this指向物件obj var f1 = obj.f; //參照物件obj的方法f f1(); //此時this指向物件window