用Object.definedproperties 一次性添加或修改多個屬性的特性和值。
<script> var obj ={} Object.defineProperties(obj,{ x:{value:1,writalbe:true,configurable:true,enumerable:true}, y:{value:2,configurable:true} }) console.log(obj.x) //=>1 console.log(obj.y) //=>2 console.log(Object.getOwnPropertyDescriptor(obj,"x"))//得到屬性的描述 value:1 writable:true configurable:true, enumerable:true console.log(Object.getOwnPropertyDescriptor(obj,"y")) // value:2 writable:false configurable:true, enumerable:false obj.z=3 //這個z是通過對象字面量的方式創建的 console.log(Object.getOwnPropertyDescriptor(obj,"z"))//所以所有的屬性特性都為true </script>
檢測對象是否是另一個對象的原型(或者處於原型鏈中)
<script> var obj={ } //此處創建了一個空對象 var obj1 =Object.create(obj) //用object.create創建了一個新對象,把obj作為obj1的原型 console.log(obj.isPrototypeOf(obj1)) //=> true 此時返回值就true,因obj是obj1的原型 console.log(Object.prototype.isPrototypeOf(obj))//=>true 因為object.prototype是頂級對象,是對象原型上的原型 console.log(Object.prototype.isPrototypeOf(obj1))//=>true 也是對象上的原型 </script>
對象類class是一個標識對象類型的字符串
ECMAscript3和ECMAscript5都沒有定義此方法,可以通過頂級對象的toString()方法
js的內建對象都帶有toSting方法,所以要用一個CALL回調
代碼如下,對何標識對象類型的字符串:
<script> function classof(obj){ if(obj === null){ return null } if(obj === undefined){ return undefined } return Object.prototype.toString.call(obj).slice(8,-1) } var x = null; //=>null var x = undefined; //=> undefined var x =true //=> boolean var x = 1234; //=> number var x = "this is" //=> string var x = new Array() //=> arry var x = new Date() //=> date console.log(classof(x)) </script>