ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScriptのapplyメソッドを理解する

JavaScriptのapplyメソッドを理解する

PHPz
PHPzオリジナル
2023-04-25 09:15:43925ブラウズ

JavaScript では、apply() メソッドは非常に便利なメソッドです。これを使用して関数を呼び出し、関数の this 値とパラメーターを設定できます。この記事では、apply() メソッドがどのように機能するかをよりよく理解するために、このメソッドを手書きします。

まず、apply() メソッドの構文を理解しましょう。これは 2 つのパラメータを取ります。最初のパラメータは呼び出される関数で、2 番目のパラメータは関数に渡されるパラメータを含む配列または配列のようなオブジェクトです。以下に示すように:

function myFunc(arg1, arg2) {
  console.log(this.name + arg1 + arg2);
}

const obj = {name: 'John'};
const args = [1, 2];

myFunc.apply(obj, args);
// 输出:John12

上の例では、apply() メソッドを使用して myFunc() 関数を呼び出しました。この値を obj に設定し、引数リストを args 配列に保存します。 myFunc() 関数の出力は、obj の name 属性を 2 つのパラメーターに追加した結果です。

ここで、apply() メソッドを手動で作成してみましょう。これを行うには、apply() メソッドの特定の機能をシミュレートする myApply() という関数を作成します。 apply() メソッドをシミュレートするには、まず指定された関数が存在するかどうかを確認し、2 番目のパラメーターが配列または配列のようなオブジェクトであること、およびオブジェクトの長さが null でないことを確認する必要があります。 myApply() 関数のコードは次のとおりです。

Function.prototype.myApply = function(context, args) {
  if (typeof this !== 'function') {
    throw new TypeError('The current object is not a function.');
  }

  if (!Array.isArray(args) && !((args.length !== null) && (args !== ''))) {
    throw new TypeError('The second argument is not an array or array-like object.');
  }

  const fn = Symbol('fn');
  context = context || window;
  context[fn] = this;

  const result = context[fn](...args);
  delete context[fn];

  return result;
}

上記のコードでは、まず呼び出される関数が存在するかどうかを確認し、存在しない場合は型エラーをスローします。次に、2 番目のパラメータが配列または配列のようなオブジェクトであるかどうかを確認します。そうでない場合は、型エラーがスローされます。両方のパラメーターが有効な場合、コンテキスト オブジェクトの一時プロパティとして一意の Symbol を作成し、関数をコンテキスト オブジェクトにバインドし、args 引数を渡してそれを呼び出し、結果を result 変数に格納します。最後に、この一時プロパティをコンテキスト オブジェクトから削除し、結果を返します。

次に、次のコードに示すように、myApply() 関数を使用して関数を呼び出すことができます。

function myFunc(arg1, arg2) {
  console.log(this.name + arg1 + arg2);
}

const obj = {name: 'John'};
const args = [1, 2];

myFunc.myApply(obj, args);
// 输出:John12

この例では、myApply() メソッドを使用して myFunc ( )関数。この値を obj に設定し、引数リストを args 配列に保存します。 myFunc() 関数の出力は、obj の name 属性を 2 つのパラメーターに追加した結果です。

この記事では、 apply() メソッドを手書きし、それを使用して関数を呼び出しました。関数が存在するかどうかを確認する方法と、不正な引数を渡さないようにする方法について説明しました。この例を使用すると、apply() メソッドがどのように機能するか、およびこのメソッドを手動で記述するために必要な手順をよりよく理解できるはずです。

以上がJavaScriptのapplyメソッドを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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