JS prototypeの誤認についての浅談
2929 ワード
最近はjsのプロトタイプを研究してみましたが、ネット上ではプロトタイプに対する誤解が多く、以下は私の心得です.
1.prototypeプロトタイプは、インスタンスに基づくものではなく、タイプに基づいています.
だから
初めはjsに接触して、誤りがあったら指摘してください!
1.prototypeプロトタイプは、インスタンスに基づくものではなく、タイプに基づいています.
var newLine = "</br>"
function App(){
this.appName = " ";
}
App.prototype.type = " ";
var a1 = new App();
var a2 = new App();
document.write(a1.type+newLine);//
document.write(a2.type+newLine);//
App.prototype.type = " ";
document.write(newLine);
document.write(a1.type+newLine);//
document.write(a2.type+newLine);//
// type 。
// type , a1 a2 , , , type , type
でも、このように書いたら、変な場面があります.
var newLine = "</br>"
function App(){
this.appName = " ";
}
App.prototype.type = " ";
var a1 = new App();
a1.type = " 1";
var a2 = new App();
a1.type = " 2";
document.write(a1.type+newLine);// 1
document.write(a2.type+newLine);// 2
// , prototype , , type 。
// , type , , , , type
// , , , ,
プロトタイプとタイプについては、すべてのインスタンスのプロトタイプの属性が同一のオブジェクトに対して設定されていますが、変更された場合には、インスタンスは自分の内部に新たな変数を作成し、各インスタンスにプロトタイプの錯覚を与えます.だから
var newLine = "</br>"
function App(){
this.appName = " ";
}
App.prototype.type = " ";
var a1 = new App();
a1.type = " 1";
var a2 = new App();
a1.type = " 2";
document.write(a1.type+newLine);// 1
document.write(a2.type+newLine);// 2
delete a1.type ;// type
document.write(a1.type+newLine);//
2.オブジェクトの構造関数はconstructorによって指定されていません.
<script language="javascript" type="text/javascript">
newLine = "</br>"
function App(){
this.appName = " ";
alert(" App");
}
function FApp(){
}
var a = new App(); // App
alert(a.hasOwnProperty("constructor")); //false App constructor
alert(a.constructor);// constructor, , constructor
//
App.prototype = new FApp();
alert(App.prototype.constructor);// FApp(), FApp , FApp constructor FApp()
// App App()
var a2 = new App(); // App()
</script>
そのconstructorはいったい何のために使われていますか?正常な原型チェーンを維持するために、また構造関数を知りたい時に調べられます.(これはネットで見つけた理解です.)初めはjsに接触して、誤りがあったら指摘してください!