{} 直接賦值,這種格式中,最後一個屬性後面若是有逗號,對於ES5是忽略的,大部分的ES3也是忽略的,IE中會報錯(贊一個)
什麼是prototype瀏覽器
每一個Javascript類在定義的時候,會關聯(繼承) 另一個對象(prototype),每一個該類的對象在建立的時候,會從這個對象上來繼承屬性,這個對象就是prototype。
prototype 的一些特性函數
經過關鍵字 new 和 構造函數建立對象的原型,就是構造函數的prototype所引用的對象
this
全部經過JSON 直接量建立的對象共用同一個原型對象,且經過Object.prototype 能夠獲取到原型對象
es5
使用 new Object() 建立的對象的原型也是 Object.prototype
prototype
Object.prototype 對象沒有本身的原型對象,其餘的對象都直接或者間接的繼承自Object.prototype 對象
code
prototype 也是一個對象,prototype 也具備本身的 prototype對象,全部的prototype 對象串聯起來,造成一個能夠訪問到的做用域鏈,叫作原型鏈,原型鏈的結尾是Object.prototype
對象
具備 getter,setter 的屬性 是 accessor property; 普通的屬性是 d> 這裏輸入引用文本ata property;
經過 this.someAccessorProperty 訪問 或者 賦值某個accessor property, 實際上調用的是對應的 getter,setter 方法
只具有getter 屬於只讀屬性;只具有setter屬於只寫屬性,訪問屬性的數值返回undefined;同時具有setter,getter屬於讀寫屬性;二者都不具有屬於普通屬性
getter,setter 屬於ES5 標準
getter,setter 的定義方法 : var obj = { x1:1, x2:2, get scale(){ return x2/x1; }, set scale(s){ this.x2 = x1 * s; } };
gettter, setter 屬性的訪問同正常屬性,用 obj.prop 或者 obj['prop']
Object.getOwnPropertyDescriptor(obj,prop) : 返回 {value:obj,writable:boolean,enumerable:boolean,configurable:boolean} --> 普通屬性; {value:getterFunction,writable:setterFunction,enumerable:boolean,configurable:boolean} --> accessor property
Object.getPrototypeOf(obj) : 返回obj 的原型函數
Object.defineProperty(obj,prop,descriptor),例如Object.defineProperty({},'id',{value :1,writable:true,enumerable:true,configurable:true});
Object.defineProperties(obj,descriptorObj),Object.defineProperties({},{x:{value:1,writable:false,enumerable:true,configurable:false},y:{value:1,writable:false,enumerable:true,configurable:false}});
若是屬性不可配置,不可經過defineProperty,defineProperties來修改屬性描述符;若是是accessor property,不可更改setter,setter;若是是 data property,不能將可寫性 由false改成true,但能夠由true改成false;不可進行accessor property ,data property 之間的互轉
若是data property不可寫,不可配置,那麼不能修改它的值;若是隻是不可寫,可是能夠配置,能夠經過 defineProperty 來修改value的值
只能經過默認的 Object.toString() 方法來獲取並截取字符串得到;對於重寫了toString() 方法的類,須要間接調用Object.toString() 方法獲取: Object.prototype.toString.call(obj).slice(8,-1);
Mozilla 早期暴露出的 對象原型的引用方式,目前,IE,Opera不支持,具備兼容問題,支持ES5 的可使用 Object.getPrototypeOf(), 或者 對象的 constructor 的屬性來對應檢測對象的原型函數