JavaScript コンストラクターの欠点は、オブジェクトがインスタンス化されるたびにプロパティとメソッドがコピーされることです。インスタンス間に同じメソッドがある場合、コンストラクターで定義されたプロパティとメソッドにはアクセスできますが、ただし、各インスタンスがコピーされるため、システム リソースが無駄に消費されます。
このチュートリアルの動作環境: Windows 10 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
利点は、instanceof を通じてオブジェクトを識別できることです。欠点は、オブジェクトがインスタンス化されるたびに、プロパティとメソッドは再びコピーされます
function CreateObj(uName) { this.userName = uName; this.showUserName = function () { return this.userName; } } var obj1 = new CreateObj('ghostwu'); var obj2 = new CreateObj('卫庄'); console.log( obj1.showUserName === obj2.showUserName ); //false
上記の実行結果から、obj1.showUserName と obj.showUserName が同じではないことがわかります [js では、参照型はアドレスを比較し、関数は参照型] が 2 つあります。
のメモリアドレスは、各オブジェクトの属性が異なるため問題ありませんが、メソッドは同じコードを実行するため、必要はありませんコピーするには複数のコピーが存在し、メモリを無駄にします。これは欠点です。
拡張知識
コンストラクター: 関数を使用して初期化する場合(new 演算子を使用して) 新しく作成されたオブジェクトを呼びます。コンストラクター (constructor)
function Person(){ this.name = "zqq"; this.age = 28; } var p = new Person();
コンストラクターが new (実行 var p = new Person()) で呼び出されると、内部で次のことが起こります。関数:
1。空のオブジェクト
var p = {};
2 を作成します。この変数は、オブジェクト p
Person.call(p)
3 を指します。p は、コンストラクター Person() のプロトタイプを継承します。
p.__proto__ = Person.prototype
4. コンストラクター Person() コードを実行します。
コンストラクターと通常の関数の違い:
1. コンストラクターは、次のメソッドを使用して呼び出されます。 new キーワード; 通常の関数は new キーワードでは呼び出されません;
var p = new Person(); var p = Person();
2. this キーワードはコンストラクター内で使用できますが、これはウィンドウを指しているため、通常の関数内で使用することはお勧めできません。現時点ではグローバル オブジェクトなので、一部のグローバル変数または関数が意図せずウィンドウに追加されることになります
コンストラクター内では、これは構築された新しいオブジェクトを指します
##通常の関数内では、これは次を指しますウィンドウ グローバル オブジェクト #3. コンストラクターはデフォルトでは戻り値を返しません。通常の関数には通常、戻り値があります。 コンストラクターはデフォルトでこれ (新しいインスタンス オブジェクト) を返します。 通常の関数は戻り値がない場合はunknownを返します if returnを使用した場合は戻り値の種類によって戻り値が異なります [関連する推奨事項:JavaScript ビデオ チュートリアル、Web フロントエンド]
以上がJavaScript コンストラクター メソッドの欠点は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。