標籤:一個 logs ons foo config 操作符 屬性 ring center
一個js對象中有 [[proto]] [[class]] [[extensible]] 三個對象標籤 ,在對象的屬性上有 writable ,enumerable,configurable,value,get/set 五個屬性標籤
| [[proto]] |
對象的原型 |
| [[class]] |
對象所屬的類型 |
| [[extensible]] |
是否可以增加新的屬性 |
| writable |
對象的屬性是否可寫 |
| enumerable |
對象的屬性是否可以枚舉 |
| configurable |
對象的屬性是否可配置 |
| value |
屬性的值 |
| get/set |
get set方法 |
對象的建立
字面量建立對象
var obj = {};obj.x = 1;obj.y = 2;
建構函式new建立對象
function foo(){}foo.prototype.z = 3;var obj = new foo();obj.x = 4;console.info(obj.z); //out:3 obj對象的[[proto]] 會指向建構函式的prototype對象,在foo.prototype對象上存在z屬性,所有能訪問到z屬性的值console.info(obj.x); //out:4‘z‘ in obj //trueobj.hasOwnProperty(‘z‘); //false
in 操作符,可以遍曆對象的屬性,但它不保證順序,同時會遍曆對象原型鏈上的屬性。如果只需要遍曆對象本身的屬性,使用hasOwnProperty();
function fun(){}fun.prototype.z = 3;var obj = new fun();obj.x = 5;obj.u = 9;for(i in obj){ console.info(i); //x u z} for(i in obj){ if(obj.hasOwnProperty(i)){ console.info(i); //x u }} Object.create()建立對象
var obj = Object.create({x : 1});obj.x // 1obj.hasOwnProperty(‘x‘);// false 說明 obj的原型 執行了{x:1}
var obj = Object.create(null);obj.toString // undefined 如果為null 它的原型會指向null
javascript對象建立