JavaScript シミュレーションを通じてカプセル化を実装する 3 つの方法とその記述方法

小云云
リリース: 2018-01-02 10:02:17
オリジナル
1306 人が閲覧しました

継承とは、サブクラスを使用して別の親クラスを継承することで、サブクラスは親クラスのすべてのプロパティとメソッドを自動的に持つことができます。このプロセスは継承と呼ばれます。 JS には継承を実装するためのメソッドが多数あります。JS はオブジェクト指向言語であり、そのオブジェクトはプロトタイプ属性を使用してシミュレートされます。この記事を使用して、js シミュレーションを通じてカプセル化する 3 つの方法について学びましょう。必要な方はぜひ参考にしてください。

//声明一个父类
function Person(name){
 this.name=name;
 this.age=age;
 this.say=function(){
   alert("我叫"+this.name);
 }
}
//声明一个子类 
function Student(){
 this.no=no;
 this.study=function(){
  alert("我在学习!");
 }
}
// 通过循坏,将父类对象的所有属性和方法,全部赋给子类对象
Object.prototype.extend=function(parent){
 for(var i in parent){
   this[i].parent[i];
 }
}
var p=new Person("张三",12);
var s=new Student("1234567");
//子类对象调用这个扩展方法
s.extend()
console.log(s);
ログイン後にコピー

継承実装の上記の原則:

ループを通じて、親クラス オブジェクトのすべての属性とメソッドが子クラス オブジェクトに割り当てられます。ポイントは for-in ループです。Object を拡張しなくても、単純なループで実装できます。

しかし、このメソッドを使用して継承を実装する場合には、いくつかの欠点があります:

①1 回のインスタンス化を通じて完全なサブクラス オブジェクトを直接取得することはできません。最初に親クラスのオブジェクトとサブクラスのオブジェクトを取得してから、それらを手動でマージする必要があります

② Object を拡張する継承メソッドは、サブクラスのオブジェクトにも保持されます。

継承を実装する 2 番目の方法を見てみましょう~

2. プロトタイプ継承を使用します

この方法を紹介する前に、プロトタイプ オブジェクトとプロトタイプという 2 つの概念について説明します

1。

①プロトタイプを持つのは関数のみであり、すべての関数にはプロトタイプが必要です

②プロトタイプ自体もオブジェクトです!

③プロトタイプは現在の関数の参照アドレスを指します!

2. __proto__: オブジェクトのプロトタイプ!

①オブジェクトのみが__proto__を持ち、すべてのオブジェクトが__proto__を持たなければなりません

②__proto__もオブジェクトなので、独自の__proto__も持ちます。この線に沿って検索する順序がプロトタイプチェーンです。

③ 関数と配列は両方ともオブジェクトであり、独自の __proto__ を持ちます

//声明父类
function Person(name,age){
   this.name=name;
   this.age=age;
   this.say=function(){
    alert("我叫"+this.name);
   }
}
//声明子类   
function Student(no){
   this.no=no;
   this.study=function(){
    alert("我在学习!我叫"+this.name+"今年"+this.age");
   }
}
//将父类对象赋给子类的prototype  
Student.prototype=new Person("张三",14);
//拿到子类对象时,就会将父类对象的所有属性和方法,添加到__proto__
var s=new Student(); 
s.study();
ログイン後にコピー
プロトタイプ継承の原則を使用します:

親クラスのオブジェクトを子クラスのプロトタイプに代入すると、親クラスのオブジェクトの属性とメソッドがサブクラスのプロトタイプに出現します。次に、サブクラスをインスタンス化するときに、サブクラスのプロトタイプがサブクラス オブジェクトの __proto__ に含まれます。最後に、親クラス オブジェクトの属性とメソッドがサブクラス オブジェクトの __proto__ に表示されます。

この種の継承の特徴:

①サブクラス自体のすべての属性はメンバー属性であり、親クラスから継承された属性はプロトタイプ属性です。

② ワンステップインスタンス化では完成したサブクラスオブジェクトをまだ取得できません。

継承を実装する 3 番目の方法:

call()、apply()、および binding() これら 3 つのメソッドは非常に似ており、パラメーターを渡す点のみが異なります。

function Person(name,age){
  this.name=name;
  this.age=age;
  this.say=function(){
    alert("我叫"+this.name);
    }
}
function Student(no,name,age){
  this.no=no;
  this.study=function(){
    alert("我在学习!");
  }
//将父类函数的this,指向为子类函数的this
Person.call(this,name,age);
}
var s=new Student(12,"张三",24);
console.log(s);
ログイン後にコピー
3 つの関数の唯一の違いは、func のパラメーター リストを受け取る方法です。それ以外には、機能に違いはありません。

3つの関数の記述方法(違い):

call記述メソッド: func.call(funcのthisが指すobj, funcパラメータ1, funcパラメータ2,...);

apply記述メソッド: func; .apply(this が指す func obj, [func パラメータ 1, func パラメータ 2,...]);

bind 記述方法: func.bind (func の this が指す obj) (func パラメータ 1, func パラメータ2,...) ;

関連する推奨事項:

php カプセル化検索クラスの例

より多くのプルダウン更新データをロードするための mui プルアップのカプセル化プロセスの詳細な説明の例

PHP 関数数値の 3 桁ごとにカンマを追加するカプセル化

以上がJavaScript シミュレーションを通じてカプセル化を実装する 3 つの方法とその記述方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート