ホームページ  >  記事  >  ウェブフロントエンド  >  JSシミュレーションオブジェクト指向完全解決(1、型と転送)_JavaScriptスキル

JSシミュレーションオブジェクト指向完全解決(1、型と転送)_JavaScriptスキル

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

しかし、クラスがなければ、どうやってオブジェクト指向について語ることができるでしょうか?問題はありません、シミュレーションできます。そして、この一連のメソッドは、オブジェクト指向 JS を実現するためのメソッドとして認識されています。
さらに、JS 内の内容は完全に開発されているため、メンバーのプライベートまたは保護されたスコープはありません。
本題に入りましょう。

1. 型 // 基本から始めて、後で面倒なことを省きます

1. 型の違い
基本的なデータ型とオブジェクト型は同じではありません。
a. 基本型は単なる値であり、動作はありませんが、オブジェクト型には独自の動作があります。
b. 基本型は値型であり、1 つの値のみを表します。オブジェクト型には多くの複雑な要素が含まれます。
c. 基本型を渡す場合は値を渡し、オブジェクト型を渡す場合はアドレスを渡します。
さらに、JS には、基本データ型とオブジェクト型の 2 つのテキスト型があります。 例:
var str="The End";//これは基本的なデータ型であり、送信方法は値を渡すことです
var str2=new string("The End");//これはnew では、オブジェクトのメモリ空間を開く識別子があり、対応する変数がオブジェクトの型になり、
を渡すときにアドレスが渡されます。 簡単に言うと、変数はリテラルで直接割り当てられます。 var a=1;var b="a";var c=true; などはすべて基本的なデータ型です (一般的に使用されるのは、数値、テキスト、ブール値です)
b. var など、new で割り当てられた変数a=new Object();var b =new string();、すべてオブジェクト型です (JS には多くのオブジェクトがあり、合理化されたオブジェクト指向言語です) 注意: 基本的なデータ型も新しい場合がありますが、新しいデータ型が存在することはほとんどありません。それを使うこと。したがって、上記の区別はすべての状況に完全に当てはまるわけではありませんので、ご自身で判断してください。

2. パラメータの受け渡し方法 ここでは主にアドレスによる受け渡しと値による受け渡しを区別します。 さらに例を見てみましょう。

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

function changeVar(変数) {
varible=5;
alter(variable) // ヒント 5
}
alert(a); // ヒント 3
changeVar (a );//関数内にパラメータを変更するコードがありますalert(a);//まだプロンプト 3

上記の例によれば、関数は変更されますが、パラメータを指定しても、パラメータが表す内容は変わりません。これは値渡しです。 changeVar を呼び出すと、JS はパラメーターとして渡された変数を再コピーします。そのため、changeVar 内で操作されるパラメーターは、実際には、渡された変数そのものではなく、そのコピーになります。 実際に渡されるのは変数そのものではなく、変数の値です。これは値渡しと呼ばれます。

コードをコピー コードは次のとおりです:
function changeVar(variable){
varible.x =5;
alert(varible.x);//プロンプト 5
}
var a=new Object;
a.x=3 alter(a.x);//プロンプト 3
changeVar( a);//この関数内にはパラメータを変更するコードがあります
alert(a.x);//プロンプト 5

上記の例は、Object オブジェクトを使用するように変更されています。 changeVar の後、元の変数の対応する属性も変更され、関数の内部は操作によって渡された変数そのものであることがわかります。 これがアドレス渡しの原理です。与えた変数のメモリアドレスを渡すと、関数内で実際に変化するのは渡した変数です。すべての操作が同じメモリアドレスで行われるためです。

ただし、この「でも」に注目してください! JS の配送先住所にはまだ特別な点があります。 JS がオブジェクト タイプを渡すと、おそらく対応するタイプのオブジェクトもコピーされますが、コピー オブジェクトのプロパティと関数はすべて元のオブジェクトのプロパティと関数です。 おそらく、属性はアドレスによって渡されるが、オブジェクトはアドレスによって渡されない可能性があります。 この特性は証明できます。 コードは次のとおりです。

コードをコピー コードは次のとおりです。
function changeVar(変数){
varible=new Object();
varible.x=5;
ヒント 5
}
var a=new Object; 🎜>a.x=3 alter (a.x);//ヒント 3
changeVar(a);//この関数内にはパラメータを変更するコードがあります
alert(a.x);//ヒント 3


変更する場合 パラメータで表されるオブジェクトを変更しても、渡した変数で表されるオブジェクトは変更されません。ただし、前述したように、元の変数で表されるオブジェクトのプロパティは、関数内でパラメーター オブジェクトのプロパティを操作することによって変更できます。これらを組み合わせると、JS がオブジェクト型を渡すと、対応する型のオブジェクトもコピーされますが、コピー オブジェクトのプロパティと関数はすべて元のオブジェクトのプロパティと関数であることが証明できます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。