Object.create("參數1[,參數2]")是E5中提出的一種新的對象的創建方式.
第一個參數是要繼承到新對象原型上的對象;
第二個參數是對象屬性.這個參數可選,默認為false
第二個參數的具體內容:
writable:是否可任意寫, true可以,false不可以
configuration:是否能夠刪除,是否能夠被修改.
enumerable:是否能用for in枚舉
value:屬性值
get()讀
set()寫
1 Object.create=function(obj){ 2 var F=function(){}; 3 F.prototype=obj; 4 return new F(); 5 }; 6 //再來一段代碼演示參數的使用. 7 function Parent(){} 8 var p=new Parent(); 9 var newObj=Object.create(p,{ 10 name:{ 11 value:"思思博士",//name值 12 writable:true,//可寫 13 enumerable:false//不可枚舉 14 }, 15 age:{ 16 get:function(){return "我今年"+age+"歲";},//讀取age 17 set:function(val){age=val;},//設置age 18 configuration:false//能否刪除 19 } 20 }); 21 console.log("newobj的屬性name:"+newObj.hasOwnProperty("name"));//false 22 console.log("parent的屬性name:"+p.hasOwnProperty("name"));//false
上面一段代碼是創建一個newObj對象,這個對象的原型是繼承自parent
又有false可以推斷出name是來自於原型中,並且不是來自於p這個對象.
hasOwnProperty().方法用來檢測給定的名字是否是對象的只有屬性.對於繼承屬性它將返回false
1 var o={x:1}; 2 console.log(o.hasOwnProperty("x"));//true. 3 console.log(o.hasOwnProperty("y"));//false 4 console.log(o.hasOwnProperty("toString"));//false
propertyIsEnumerable()是hasOwnProperty()的增強版,只有檢測到是只有屬性且這個屬性的可枚舉為true是它才返回true.
1 var obj=Object.create(o); 2 obj.xx=1; 3 console.log(obj.propertyIsEnumerable("x"));//false 4 console.log(obj.propertyIsEnumerable("xx"));//true 5 console.log(Object.prototype.propertyIsEnumerable("toString"));//false