用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>