これら2つの間に違いはありますか:
var test1 = function () {
this.method1 = function() {}
}
と
var test2 = function() {};
test2.method1 = function() {};
これら2つの間に違いはありますか:
var test1 = function () {
this.method1 = function() {}
}
と
var test2 = function() {};
test2.method1 = function() {};
最初のスニペットはthis
、それが何であれ object を取り、 という名前のそのスロット (フィールド) に関数を割り当てますmethod1
。の呼び出しthis
方法に応じて、さまざまなオブジェクトを表すことができます。test1
test1()
--this
はwindow
new test1()
--this
作成中のオブジェクトを参照しますcall
またはapply
-- test1.apply(someObject)
-- を介して呼び出された場合this
、引数を参照します2 番目のスニペットはオブジェクトtest2
を取得し、関数を という名前のスロットに割り当てますmethod1
。
最初の方法は、より多くのオブジェクトを作成し、new
キーワードを持つ必要があるコンストラクターです。
var mytest1 = new test1();
mytest1.method1();
2 番目の方法はすぐに使用できます。
test2.method1();
最初の1つ:
var test1 = function () {
this.method1 = function() {}
}
関数「test1」を定義します。"test1" が呼び出されると (そのときだけ)、"this.method1" は何もしない関数として定義されます。
二番目:
var test2 = function() {};
test2.method1 = function() {};
関数「test2」を作成し、同時に関数「test2.method1」を定義します。最初の関数を呼び出す必要はありません。
最初のものは、test1() を呼び出すものに method1 プロパティを設定します。
2 つ目は、空の関数を定義し、test2 に method1 プロパティを設定します。
構文が正しかったと仮定すると、最初のコンストラクターは、new test1()
method1 というメソッドを介して作成されたすべての test1 オブジェクトを提供します。2 つ目は、コンストラクター オブジェクトに関数を追加するだけです。JavaScript では、関数はプロパティ (メソッドを含む) を持つことができるオブジェクトです。
最初のバージョンでは、次のようにインスタンス化されたすべてのオブジェクトで使用できるメソッドを実際に作成します。
var o = new test1();
o.test1();
2 つ目は、単純に関数を属性として test2 関数にアタッチしました。他のクラスベースの OO 言語に精通している場合、これは静的メソッドのように機能します。this
2 番目の例では、ポインターにアクセスできません。