用Object.definedproperties 一次性添加或修改多个属性的特性和值。
1 <script> 2 var obj ={} 3 Object.defineProperties(obj,{ 4 x:{value:1,writalbe:true,configurable:true,enumerable:true}, 5 y:{value:2,configurable:true} 6 }) 7 console.log(obj.x) //=>1 8 console.log(obj.y) //=>2 9 console.log(Object.getOwnPropertyDescriptor(obj,"x"))//得到属性的描述 value:1 writable:true configurable:true, enumerable:true10 console.log(Object.getOwnPropertyDescriptor(obj,"y")) // value:2 writable:false configurable:true, enumerable:false 11 obj.z=3 //这个z是通过对象字面量的方式创建的12 console.log(Object.getOwnPropertyDescriptor(obj,"z"))//所以所有的属性特性都为true13 </script>
检测对象是否是另一个对象的原型(或者处于原型链中)
1 <script>2 var obj={3 } //此处创建了一个空对象4 var obj1 =Object.create(obj) //用object.create创建了一个新对象,把obj作为obj1的原型5 console.log(obj.isPrototypeOf(obj1)) //=> true 此时返回值就true,因obj是obj1的原型6 console.log(Object.prototype.isPrototypeOf(obj))//=>true 因为object.prototype是顶级对象,是对象原型上的原型7 console.log(Object.prototype.isPrototypeOf(obj1))//=>true 也是对象上的原型8 </script>
对象类class是一个标识对象类型的字符串
ECMAscript3和ECMAscript5都没有定义此方法,可以通过顶级对象的toString()方法
js的内建对象都带有toSting方法,所以要用一个CALL回调
代码如下,对何标识对象类型的字符串:
1 <script> 2 function classof(obj){ 3 if(obj === null){ 4 return null 5 } 6 if(obj === undefined){ 7 return undefined 8 } 9 return Object.prototype.toString.call(obj).slice(8,-1)10 }11 var x = null; //=>null12 var x = undefined; //=> undefined13 var x =true //=> boolean14 var x = 1234; //=> number15 var x = "this is" //=> string16 var x = new Array() //=> arry17 var x = new Date() //=> date18 console.log(classof(x)) 19 </script>
原标题:js 中对象的特性
关键词:JS