JavaScript_javascript スキルの call() メソッドによってトリガーされるオブジェクト指向継承メカニズムの呼び出しについての考え

WBOY
リリース: 2016-05-16 18:02:26
オリジナル
953 人が閲覧しました

原因:
今日、Master Snandy の「jQuery の読み方 (DOM 要素の取得)」の第 5 章を読んでいると、toArray() メソッドについて言及されています。具体的な jQuery コードは次のとおりです。

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

toArray: function() {
return slide.call( this, 0 );
},
get: function( num ) {
return num == null ?
// 'クリーンな' 配列を返します
this.toArray() :
// Returnオブジェクト
( num },

ここの call() メソッドを参照してください。以前にマニュアルを読んだことがありますが、これはオブジェクトの偽装であり、継承に使用されると書かれていました。 jQuery のソース コードが少し複雑なので、この部分を抽出して別のファイルに置き、具体的な実行を確認しました。

でも、まだよくわからないので、今日は通話の勉強をすることにしました。そこで、MDN で説明を確認し、思いつきでオックスフォード辞書「Sunflower Collection」を取り出して、自分の英語を練習して上達させ、困っている友達に手助けできるようにしました (英語に間違いがあった場合)。訳) 抜け道はご容赦ください!
call
概要:
this と引数を指定して関数
を呼び出します。 注: このメソッドの構文は apply メソッドと似ています。違いは、call() はパラメータ リストを受け入れるのに対し、apply() は関数に渡されるパラメータの配列を受け入れることです。
Function クラスのメソッド: JavaScript バージョン 1.3 以降
構文:
fun。 call(thisArg[, arg1[, arg2 [, ...]]])
パラメーターの説明:
thisArg:
fun() の呼び出しのオブジェクトを指定します。注: 表示されるこの値は、実際の値ではない可能性があります。このメソッドが非厳密モードの場合、null と未定義はグローバル オブジェクトに置き換えられ、元の値がカプセル化されます。
arg1,arg2,....
このオブジェクトのパラメータ
説明:
既存の関数を呼び出すときに、別のオブジェクトを割り当てることができます。このとき、thisで指定したオブジェクトが現在呼び出しているオブジェクトとなります。
call を使用すると、メソッドを 1 回だけ作成し、それを別のオブジェクトに継承させることができます。新しいオブジェクトを自分で作成する代わりに、このメソッドをオーバーライドします。 (つまり、オブジェクトの偽装です。以下に例があります。)

MDN 公式 Web サイトに例があります。さらに、stackoverflow で関連する質問を偶然見ましたが、その中の回答を見て、オブジェクトの偽装とそれがどのように起こったかをすぐに理解しました。
その部分を以下に抜粋します (元のテキストを読むにはここをクリックしてください):

JavaScript では、オブジェクトのメソッドを実行時に別のオブジェクトにバインドできます。つまり、JavaScript ではオブジェクトを「借用」できます。別のオブジェクトのメソッド:
コードをコピー コードは次のとおりです:

object1 = {
name:'frank',
greet:function(){
alert('hello ' this.name)
}
};
object2 = {
name: 'andy'
};
// object2 には挨拶メソッドがないことに注意してください。
// ただし、object1 から「借用」することもできます:
object1.greet.call(object2);
関数オブジェクト (JavaScript では関数もオブジェクトです) の call メソッドと apply メソッドを使用すると、これを行うことができます。コードでは、Nodelist が配列のスライス メソッドを借用していると言えます。スライスは結果として別の配列を返すという事実です。

ここでの最初の文は非常に鮮やかで、一般的な意味は次のとおりです。JavaScript では、オブジェクトのメソッドを別のオブジェクトにバインドできます。簡単に言うと、JavaScript では、オブジェクトがそれ自体に属さないメソッドを「借用」することができます。上記の例では、object2 が object1 のふりをして object1 のメソッドを呼び出します。

追伸: 新人がブログを書くのは初めてなので少し乱雑ですが、これから徐々にブログの書き方や書き方を学んでいくつもりです。良いブログを書きます。また、皆さんからのご批判やご指導も大歓迎です!

参考資料:
1.
w3cschool ECMAScript 継承機構の実装

2.MDN での通話手順

3.スタックオーバーフロー

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