ホームページ  >  記事  >  ウェブフロントエンド  >  javascript プロトタイプ オブジェクトの拡張機能_javascript スキル

javascript プロトタイプ オブジェクトの拡張機能_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 18:53:061005ブラウズ

もちろんJavaScriptも例外ではありませんが、オブジェクト参照の問題について考えたことはありますか?通常のアプローチは、オブジェクトごとに関数を複製するのではなく、一連のオブジェクトがクラスのメソッドを共有することです。各オブジェクトの関数をコピーする方法を見てみましょう。

コードをコピー コードは次のとおりです。

var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2;
this.showmsg=function()
{
alert("name:" this.name "n " "年齢 :" this.age);
}
}
var objectone=new myobject('liu',20);
alert(objectone.name); //liu
var objecttwo= new myobject('lin',20);
alert(objecttwo.name); //lin
alert(objecttwo.showmsg());
var objectthree=new myobject('lhking') ,22) ;
alert(objectthree.showmsg());

オブジェクト間の干渉はなく、すべてが正常に完了することができます。しかし、新しいオブジェクトを生成するたびに、スクリプト エンジンはそのオブジェクトにプロパティとメソッドをコピーします。これはメモリの無駄だと思いますか?クライアント側でオブジェクトをコピーするこの方法は、新しいインスタンスが生成されるたびにすべてのプロパティとメソッドがコピーされ、大量のメモリを占有するため、メモリ リークが非常に発生しやすくなります。
大規模な JavaScript アプリケーションで最初に考慮すべき点は、メモリの問題です。
正しい使用方法は、prototype キーワードを使用してクラスのメソッドまたは属性を定義することです
コードをコピーします コードは次のとおりです。

var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2; myobject.prototype.showmsg=function( )
{
alert("name:" this.name "n" "age:" this.age);
}
}
var objectone =new myobject('liu', 20);
alert(objectone.name);
var objecttwo=new myobject('lin',20); alert(objecttwo.showmsg()) ;
var objectthree=new myobject('lhking',22);
alert(objectthree.showmsg);


この場合、作成したオブジェクトはメソッドを共有できます。つまり、showmsg() 関数は 1 回だけ定義され、他のオブジェクトは独自のメソッドをコピーするのではなく、このメソッドを共有します。
JavaScriptでのプロトタイプが完成しました。

JavaScript でのオブジェクト展開を見てください



コードをコピーします コードは次のとおりです:function rand(x)
{
return Math.ceil(Math.random()*x);
}
ランダム配列を生成する拡張メソッド
Array。 prototype.random= function()
{
for(var i=(this.length-1);i>1;i--)
{
var j=rand(this.length -1);
var キャッシュ = this[i];
this[j]=キャッシュ;
}
array=new Array ("1","2","3","4","5");
for(var a in array)
{
alert(array[a]) ;
}
array.random();
for(配列内の変数 b)
{
alray[b]); 🎜>もう一度見てください。オブジェクトのリフレクションを見てください。
リフレクションは、オブジェクトについて何も知らなくても、そのプロパティとメソッドを理解できるようにするオブジェクトのメカニズムです。通常、プログラマは、操作するオブジェクトがどのように構成されているかを理解していません。他の人が作成した複雑なオブジェクトを使用する場合、特別な場合には、このオブジェクトのプロパティとメソッドをすぐに理解する必要があり、リフレクション メカニズムを使用する必要があります。したがって、リフレクションの適用はこれに限定されません。これは、JavaScript でのリフレクションの使用方法の単なる入門です。

まず、オブジェクトに特定のプロパティまたはメソッドがあるかどうかを知りたい場合があります。
if (typeof(myobject.someproperty)!="unknown")
{
}
オブジェクトまたは変数が Javascript で定義されていない場合は、常に未定義の型を返します
を使用することもできます。その他のテスト範囲を狭めるための組み込みクラス:
if(myobjectinstanceof Object)
{
}
instanceof は、組み込みクラスまたはカスタム クラスのテストに使用される演算子です。クラスは、 Array 、 String 、 Date 、 Number 、 Math 、 RegExp 、 Boolean 、 Function 、およびその他の組み込みクラスを指します。たとえば、 Function と Array は両方とも Object クラスから継承するため、コード内で Array オブジェクトをテストする場合、最初にオブジェクトであるかどうかをテストすると、true が返されます。配列であるかどうかをテストすると、true が返されます。

より簡単で便利な方法は、オブジェクトのすべてのプロパティとメソッドを走査して、オブジェクトの内部状態をすばやく理解することです:




コードをコピー


コードは次のとおりです:

function myobject(){
this.name="name";
this.age="年齢";
this.sex="セックス";
this.func=function(){
}
}
var myobj=new myobject();
for(myobj の var i){
alert(myobj[i]);
}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。