1. ホーム
  2. javascript

[解決済み] JavaScriptです。クラス.メソッドとクラス.プロトタイプ.メソッドの比較

2022-03-19 19:31:03

質問

次の2つの宣言の違いは何ですか?

Class.method = function () { /* code */ }
Class.prototype.method = function () { /* code using this.values */ }

1つ目の文はスタティックメソッドの宣言、2つ目の文はインスタンスメソッドの宣言と考えればいいのでしょうか?

どのように解決するのですか?

はい、最初の関数は、そのオブジェクトのインスタンスと何の関係もありません。 コンストラクタ関数 のように考えることができます。 '静的メソッド' .

JavaScriptの関数は ファーストクラス オブジェクトは、他のオブジェクトと同じように扱うことができます。 関数オブジェクト .

2つ目の関数は、コンストラクタ関数のプロトタイプを拡張しているので、この関数は new キーワードを使用し、その関数内のコンテキスト( this キーワード)は、それを呼び出した実際のオブジェクトのインスタンスを参照します。

この例で考えてみましょう。

// constructor function
function MyClass () {
  var privateVariable; // private member only available within the constructor fn

  this.privilegedMethod = function () { // it can access private members
    //..
  };
}

// A 'static method', it's just like a normal function 
// it has no relation with any 'MyClass' object instance
MyClass.staticMethod = function () {};

MyClass.prototype.publicMethod = function () {
  // the 'this' keyword refers to the object instance
  // you can access only 'privileged' and 'public' members
};

var myObj = new MyClass(); // new object instance

myObj.publicMethod();
MyClass.staticMethod();