クラス コンストラクター
JavaScript 関数はクラスのコンストラクターとしても機能するため、関数を宣言している限り、new キーワードを使用してクラスのインスタンスを作成できます。
function Person(name) { this.name = name; this.toString = function() { return 'Hello, ' + this.name + '!'; }; } var p = new Person('Ghostheaven'); alert(p); // Hello, Ghostheaven!
上の例では、クラスのコンストラクターとして Person 関数が使用されています。このとき、インスタンスに属性とメソッドを追加できます。 、こちらの記事を参考にしてください。ここで話したいのは、JavaScript 関数をクラス コンストラクターとして使用する場合の戻り値の問題です。
function MyClass(name) { this.name = name; return name; // 构造函数的返回值? } var obj1 = new MyClass('foo'); var obj2 = MyClass('foo'); var obj3 = new MyClass({}); var obj4 = MyClass({});
上記のコンストラクターは非常に特殊で、return ステートメントを持っています。では、obj1 ~ obj4 はそれぞれどのオブジェクトを指しているのでしょうか?実際の結果は次のとおりです:
obj1 = MyClass对象 obj2 = 'foo' obj3 = {} obj4 = {}
Function クラス
JavaScript ランタイムには Function という組み込みクラスがあります。関数を宣言するために function キーワードを使用することは、実際には、すべての関数が All を持っているという省略形です。 call、apply、bind などの Function クラスのメソッドは、instanceof キーワードを通じて検証できます。
Function はクラスであるため、そのコンストラクターは Function であり (それ自体も Function クラスのオブジェクトです)、new キーワードを通じて関数オブジェクトを生成できるはずです。ここで最初のモンスターが登場します。それは、Function クラスを使用して関数を構築する方法です。 Function の構文は次のとおりです:
new Function ([arg1[, arg2[, ... argN]],] functionBody)
ここで、arg1、arg2、... argN はパラメーター名を表す文字列、functionBody も関数本体を表す文字列、前のパラメーター名はオプション、コンストラクターです。 of Function は、最後のパラメータを関数本体として扱い、前のパラメータをパラメータとして扱います。
var func1 = new Function('name', 'return "Hello, " + name + "!";'); func1('Ghostheaven'); // Hello, Ghostheaven!
上記のメソッドは、Function を通じて関数を構築します。この関数は、function キーワードで宣言された他の関数とまったく同じです。
Function クラスには独自の用途があり、これを使用してさまざまな関数ロジックを動的に生成したり、eval 関数の関数を置き換えたりして、現在の環境が汚染されないようにすることができます*。
自己更新関数
多くの言語では、一度関数を宣言すると、同じ名前の関数を再度宣言することはできず、構文エラーが発生しますが、JavaScript の関数は繰り返し宣言できるだけでなく、更新することもできます。彼ら自身。自らを喰らう怪物がここに!
function selfUpdate() { window.selfUpdate = function() { alert('second run!'); }; alert('first run!'); } selfUpdate(); // first run! selfUpdate(); // second run!
この種の関数は 1 回だけ実行されるロジックに使用でき、最初の実行後にロジック全体が新しいロジックに置き換えられます。
以上がJavaScriptクラスコンストラクターと自己更新関数のコード例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。