5

これら2つの間に違いはありますか:

var test1 = function () {
    this.method1 = function() {}
}

var test2 = function() {};
test2.method1 = function() {};
4

6 に答える 6

4

最初のスニペットはthis、それが何であれ object を取り、 という名前のそのスロット (フィールド) に関数を割り当てますmethod1。の呼び出しthis方法に応じて、さまざまなオブジェクトを表すことができます。test1

  • スタンドアロン関数として呼び出された場合 -- test1()--thiswindow
  • コンストラクターとして呼び出された場合 -- new test1()--this作成中のオブジェクトを参照します
  • callまたはapply-- test1.apply(someObject)-- を介して呼び出された場合this、引数を参照します

2 番目のスニペットはオブジェクトtest2を取得し、関数を という名前のスロットに割り当てますmethod1

于 2012-05-31T18:09:22.197 に答える
1

最初の方法は、より多くのオブジェクトを作成し、newキーワードを持つ必要があるコンストラクターです。

var mytest1 = new test1();
mytest1.method1();

2 番目の方法はすぐに使用できます。

test2.method1();
于 2012-05-31T18:03:21.783 に答える
0

最初の1つ:

var test1 = function () {
    this.method1 = function() {}

}

関数「test1」を定義します。"test1" が呼び出されると (そのときだけ)、"this.method1" は何もしない関数として定義されます。

二番目:

var test2 = function() {};
test2.method1 = function() {};

関数「test2」を作成し、同時に関数「test2.method1」を定義します。最初の関数を呼び出す必要はありません。

于 2012-05-31T18:05:28.090 に答える
0

最初のものは、test1() を呼び出すものに method1 プロパティを設定します。

2 つ目は、空の関数を定義し、test2 に method1 プロパティを設定します。

于 2012-05-31T18:05:43.933 に答える
0

構文が正しかったと仮定すると、最初のコンストラクターは、new test1()method1 というメソッドを介して作成されたすべての test1 オブジェクトを提供します。2 つ目は、コンストラクター オブジェクトに関数を追加するだけです。JavaScript では、関数はプロパティ (メソッドを含む) を持つことができるオブジェクトです。

于 2012-05-31T18:03:30.853 に答える
0

最初のバージョンでは、次のようにインスタンス化されたすべてのオブジェクトで使用できるメソッドを実際に作成します。

var o = new test1();
o.test1();

2 つ目は、単純に関数を属性として test2 関数にアタッチしました。他のクラスベースの OO 言語に精通している場合、これは静的メソッドのように機能します。this2 番目の例では、ポインターにアクセスできません。

于 2012-05-31T18:04:12.887 に答える