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