javascript的創建對象object.create()和屬性檢測hasOwnPrototype()和propertyIsEnumerable()


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM