ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript オブジェクト指向プログラミングの基礎: カプセル化

JavaScript オブジェクト指向プログラミングの基礎: カプセル化

高洛峰
高洛峰オリジナル
2017-01-04 09:30:211293ブラウズ

長い間 (ここでほくそ笑んでおきたいのですが)、js は「一種の装飾であり、フォーム検証などの非常に限られた機能を完了するものであり、言語自体は手続き型言語として使用されてきました。複雑な機能を完了するのは困難です」 」しかし、(苦々しく悲しいことを言いたいのですが)、「Ajax の出現により、複雑なスクリプトが必要なコンポーネントになり、JavaScript プログラミングの新しい要件が提示されました。多くの Ajax アプリケーションは JavaScript を使用し始めました。オブジェクト指向のプロパティは、実際、JavaScript はオブジェクト指向開発のアイデアを実装するための完全なメカニズムを提供します。」なんてことだ、私は学びたくなかったし、学ぶ勇気もなかったが、今は覚悟を決めて学ばなければならない。
ここにはオブジェクトに関するナンセンスがたくさんあります。オブジェクト指向プログラミングの 3 つの主な特徴は、カプセル化、継承、ポリモーフィズムであることは誰もが知っています。以下に、これら 3 つの特性に関するいくつかの学習体験を記録します。
さて、カプセル化から始めましょう。ご存知のとおり、オブジェクトはカプセル化の最も基本的な単位です。カプセル化により、プログラムの相互依存性に起因する変更の影響が防止されます。オブジェクト指向のカプセル化は、従来の言語のカプセル化よりも明確で強力です。コードは簡単です。 簡単なコードを見てみましょう:

// 関数を定義してクラスを定義します
function class1() {
// クラスのメンバーとコンストラクターの定義
// ここで、class1 は関数とクラスの両方です。関数としては、初期化を担当するクラスのコンストラクターとして理解できます。
}

// new 演算子を使用してクラスのインスタンスを取得します
var obj = new class1();
/* クラスの概念はさておき、コードの形式からすると、class1 は関数です。 it all すべての機能が新品で操作できるようになりますか?答えは「はい」です。
JavaScript では、関数とクラスは同じ概念です。関数が新しい場合、オブジェクトが返されます。この関数に初期化されたクラス メンバーがない場合は、空のオブジェクトが返されます。
実際、新しい関数の場合、この関数は表現されたクラスのコンストラクターであり、その関数内のすべてのコードはオブジェクトを初期化するために動作しているとみなすことができます。クラスを表すために使用される関数はコンストラクターとも呼ばれます。
JavaScript では、各オブジェクトは複数のプロパティ (メソッド) のコレクションとして見ることができます
*/

function test() {
alert( typeof (obj))
}




上記のコード定義class class1 は、js での単純なカプセル化です。js が「静的クラス」をどのように定義するかを見てみましょう。

function class1() { // コンストラクター
}
// 静的プロパティ
class1.staticProperty = " test " ;静的メソッド
class1.staticMethod = function () {
alert(class1.staticProperty);

function test() {
// 静的メソッド
class1.staticMethod() を呼び出します
alert( typeof ( class1));

}

次に、「抽象クラス」を見てみましょう:

/*
従来のオブジェクト指向言語では、抽象クラスの仮想メソッドを最初に宣言する必要がありますが、それらは他のメソッドで呼び出すことができます。
JavaScript では、仮想メソッドは、クラス内で定義されていないが、このポインターを通じて使用されているメソッドと見なすことができます。
従来のオブジェクト指向メソッドとは異なり、ここでの仮想メソッドは宣言する必要がなく、直接使用されます。これらのメソッドは派生クラス

*/

// extend メソッドを定義します
Object.extend = function (destination, source) {
for (property in source) {
destination[property] = source[property] ;
}
return destination;
}
Object.prototype.extend = function (object) {
return Object.extend.apply( this , [ this , object])
// 抽象基本クラスのベースを定義します。なし コンストラクター
function base() { }
base.prototype = {
initialize: function () {
this .oninit(); // 仮想メソッドを呼び出します
}
}
// class1 を定義します
function class1() {
// コンストラクター
}
// class1 に Base を継承させ、oninit メソッドを実装します
class1.prototype = ( new Base()).extend({
oninit: function () { // 抽象基本クラス oninit virtual を実装しますMethod in
//oninit 関数の実装
}
});

上記の「class1 にベースから継承させ、その中に oninit メソッドを実装する」ときに「継承」の概念が使用されていることがわかります。注意してください。実行結果を見てみましょう:

function test() {
var obj = new class1();
obj.oninit = function () {alert( " test " ) }
obj.oninit(); }



その他の JavaScript オブジェクト指向プログラミングの基礎: カプセル化関連の記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。