javascriptの作成対象者object.create()と属性検出ハスOwnProttype()とpropertyIs Enumerable()

5560 ワード

Object.create(「パラメータ1[,パラメータ2]」)はE 5で提案された新しいオブジェクトの作成方式です.最初のパラメータは新しいオブジェクトの原型に継承されるオブジェクトです.二つ目のパラメータは対象属性です.このパラメータはオプションとして、デフォルトはfalseの2番目のパラメータの具体的な内容です.writable:任意に書くことができますか?trueはいいです.falseはconfigrationできません.削除できますか?変更できますか?enumerable:forで列挙することができますか?属性値get()を読みます.
 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
propertyIs EnumerableはhasOwnPropertyの拡張版であり、属性だけが検出され、この属性のリストが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