JavaScript コンストラクターの使い方

PHP中文网
リリース: 2017-06-28 11:48:00
オリジナル
1701 人が閲覧しました

コンストラクターはインスタンスオブジェクトを初期化し、オブジェクトのプロトタイプ属性はインスタンスオブジェクトを継承します。この記事では、JavaScript コンストラクターについて詳しく説明します。JS コンストラクターについての知識に興味のある方は、一緒に学んでください。コンストラクターはインスタンス オブジェクトを初期化し、オブジェクトのプロトタイプ属性はインスタンス オブジェクトを継承します。 。

コンストラクターの注意:

1. デフォルト関数の最初の文字は大文字です

2. コンストラクターは何も返しません。 new 演算子は、指定された型を自動的に作成して返します。コンストラクターが呼び出されると、new は自動的に this オブジェクトを作成し、その型がコンストラクターの型になります。

3. コンストラクター内で return を明示的に呼び出すこともできます。戻り値がオブジェクトの場合は、新しく作成されたオブジェクト インスタンスの代わりにそれが返されます。戻り値がプリミティブ型の場合、それは無視され、新しく作成されたインスタンスが返されます。

 function Person( name){
        this.name =name;
      }
       var p1=new Person('John');
ログイン後にコピー

は、

   function person(name ){
        Object obj =new Object();
        obj.name =name;
         return obj;
      }
       var p1= person("John");
ログイン後にコピー

4と同等です。コンストラクターも関数であるため、直接呼び出すことができますが、この時点では、その戻り値は未定義です。コンストラクターはグローバルの this オブジェクトと同じです。 this.name は実際にグローバル変数名を作成します。厳密モードでは、new 経由で Person コンストラクターを呼び出すとエラーが発生します。

5. コンストラクターで Object.defineProperty() メソッドを使用して初期化することもできます。これ以上ある場合、ほとんどの人はより単純な方法を採用します。次のように、オブジェクト リテラルを直接使用してプロトタイプ オブジェクトを置き換えます。 person.prototype を複数回実行していますが、注意しなければならない副作用があります:


プロトタイプ オブジェクトをリテラル形式で書き換えると、コンストラクターのプロパティが変更されるため、コンストラクターは Person ではなく Object を指します。これは、プロトタイプ オブジェクトには他のオブジェクト インスタンスにはないコンストラクター プロパティがあるためです。関数が作成されると、そのプロトタイプ プロパティも作成され、プロトタイプ オブジェクトのコンストラクター プロパティは関数を指します。プロトタイプ オブジェクトがオブジェクト リテラル形式を使用して書き換えられると、そのコンストラクター プロパティが汎用オブジェクト Object に設定されます。これを回避するには、次のように、プロトタイプ オブジェクトを書き換えるときにコンストラクターを手動でリセットする必要があります。

  function Person( name){
        Object.defineProperty(this, "name"{
          get :function(){
             return name;
          },
           set:function (newName){
            name =newName;
          },
          enumerable :true, //可枚举,默认为false
           configurable:true //可配置
         });
      }  
       var p1=new Person('John');
ログイン後にコピー

再度テスト:

p1.constructor===person

tru​​e


p1.constructor===Object

false

p1instanceof Person


tru​​e

以上がJavaScript コンストラクターの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート