1

プログラミング全体への最初の参照としてjavascriptを探索するのと同じように、私は専門家ではないため、多くのことを理解できません。そのため、誰かが舞台裏で実際に何が起こっているのかを説明していただければ幸いです。

body タグで、「new」を含む関数と「new」を含まない関数の 2 つの関数を宣言しました。

  • 新しい関数 sayHi () {alert('hi')}
  • 関数 sayHello () {alert('hello')}

したがって、最初の関数は () を使用せずに呼び出されるため、正しく理解しているので、ドキュメントの読み込み中に「こんにちは」と表示されます。しかし、「こんにちは」を表示するには、コードのどこかで sayHello.call() のようなものを使用する必要があります。

オブジェクトインスタンスの作成としての「new」演算子の主な目的を理解していると思います。さらに、「new」演算子の有無にかかわらず、関数オブジェクトのインスタンスの宣言にはわずかな違いがあると想定することもできます。

しかし、ドキュメントが定義中に 'new' 演算子を使用して関数を実行し、別の関数がメモリのどこかに残されると、実際にはどうなるでしょうか?

4

2 に答える 2

3

1)new関数を定義するときは使用しませんがnew、新しいオブジェクトを作成する目的で関数を呼び出すときに使用します。

2)new関数を定義するときに使用すると、すぐに起動することを意味します。これは便利な場合もあります... ...しかし、初心者が学ぶべき方法ではありません。また、この手法のより受け入れられているバージョンは IIFE (Immediately Invoked Function Expression) と呼ばれ、次のようになります。

(function () {
/* function stuff in here */
}());

それ以外の

new function () { /* function stuff in here */ }

そのように関数を定義しようとすると、後でそれを使用しようとするとエラーが発生します (定義されていないため)。

関数を実際に定義する 2 つの方法を次に示します。

var sayHi = function () { console.log("Hi!"); };

function sayHello () { console.log("Hello"); }

これらはどちらも使用しませんnew

それらを呼び出して仕事をさせるために、 を使用する必要はありません.call().call()動作しますが、非常に長い間必要としない特別な目的があります。

あなたがする必要があるのはこれだけです:

sayHello();
sayHi();

New は、特定の種類のオブジェクトを作成する場合に使用することを目的としています。

JavaScript でオブジェクトを作成するのは非常に簡単です。

var obj = {};
var person = { name : "Bob" };

person.name; // "Bob"
person.age = 32;

オブジェクトの操作は非常に簡単です。

classesしかし、他のプログラミング言語では、オブジェクトの設計図のようなものが必要です。

JS では、次のようなクラスを作成できます。

function Person (name, age) { this.name = name; this.age = age; }

そしてそれを次のように使用します:

var bob = new Person("Bob", 32);
bob.name; // "Bob";
bob.age;  // 32;

?をどこに置いたnewか見てください。
人を作る機能を使って、 になりたいと言いbobましたnew Person

しかし、JS では、これは次のように簡単に行うことができます。

var mike = { name : "Mike", age : 20 };

関数を構築する必要も、使用する必要もありませんでしたnew。うまくいきました。

于 2013-02-18T11:27:48.450 に答える
1

それらはまったく別のものです。2 つ目は標準の JavaScript 関数の宣言(および で呼び出すことができますsayHi();) ですが、最初のものは次のように書き直す必要があります。

new (function sayHi() { alert('hi'); });

これで、 (名前付きの) 関数expressionであることがわかります。これはnewoperatorに直接渡されます。本当にすぐに呼び出したい場合 (アプリケーションがある場合) は、使用しないでください。(function(){…})());

于 2013-02-18T11:27:57.593 に答える