この記事では主に JavaScript でオブジェクトを作成する 4 つの方法を紹介します。必要な方はぜひ参考にしてください。 (); {}
日常的に使用する場合、オブジェクトを作成する最も一般的な方法は、{} を使用してオブジェクトを直接作成することです。直接書いた それだけですが、ある練習では、この方法で作成したオブジェクトを別の js ファイルに記述し、それを HTML で使用する方法を知りませんでしたが、久しぶりに Object.create メソッドを使用しました。新しい落とし穴が発生することは予想していませんでした。この方法は ES5 以降のみをサポートするため、将来の参考のために、互換性を処理する必要があります。 メソッド 1: Object.create
1. 構文
戻り値: 新しく作成されたオブジェクト
var aa = { valA:1, fnA: function(){console.log(this.valA)} }; var bb = Object.create(aa, { // foo会成为所创建对象的数据属性 foo: { writable:true, configurable:true, value: "hello" }, // bar会成为所创建对象的访问器属性 bar: { configurable: false, get: function() { return 10 }, set: function(value) { console.log("Setting `o.bar` to", value); } } });
そして、 bb.__proto__ == aa
2.polyfill このメソッドをサポートしていない ES5 より前のブラウザの場合は、互換性のために次のメソッドを使用できます。これも Object.create Polyfill;
if (typeof Object.create !== "function") { Object.create = function (proto, propertiesObject) { if (typeof proto !== 'object' && typeof proto !== 'function') { throw new TypeError('Object prototype may only be an Object: ' + proto); } else if (proto === null) { throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument."); } if (typeof propertiesObject != 'undefined') throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument."); function F() {} F.prototype = proto; return new F(); }; }
3 の最初のパラメータであるという 1 つの文を覚えておいてください。イースターエッグ 役に立つかもしれない 2 つの写真を添付します。 ~~~~
画像を開けない場合のために説明します。図 1 は、ES5 の新しいオブジェクト メソッドには create&keys、defineProperty、String メソッドには Trim、および array メソッドが含まれていることを示しています。は、indexOf、filter&map、foreach です。 図 2 は、ES5 をサポートするブラウザです。Chrome はこれを適切にサポートしていますが、IE は IE11 でのみサポートしています。 方法 2: 新しいコンストラクター
この方法は、特に継承、拡張性の向上のために非常によく使用されます。カプセル化
function Person(){ this.name = '****'; this.age = 11, this.getAge = function(){} }
var p = new Person();
である p を出力できます。 メソッド 3: new Object()
1。
{ name: '****'; age: 11, getAge: function(){}, __proto__: Object } pp.constructor == Person ==> **true** Person.__proto__ == Function.prototype ==> **true**
と同等の空のオブジェクト
var obj = new Object();
var obj = {};
結果は次のとおりです:
var aa = { valA:1, fnA: function(){console.log(this.valA)} }; var oo = new Object(aa);
これは、oo がオブジェクトの直接コピーと同じように、aa の浅いコピーであることを意味します。
なぜこのようにテストしたいのかわかりません。 。 。 。このメソッドは、次の理由から new Person に似ています:
Object.__proto__ == Function.protoTypePerson.__proto__ == Function.protoTypeObject はオブジェクトのコンストラクターであり、そのプロトタイプ オブジェクトも Function Prototype
Method 4: {}
このメソッドは、
オブジェクト リテラルを使用してオブジェクトを作成します
。これは最も簡単な方法であり、多数のプロパティ オブジェクト プロセスを含むオブジェクトの作成を簡素化することが目的です。 。
oo === aa ==> true oo.valA = 2; console.log(aa.valA) ==> 2
概要
これらは、オブジェクトを作成するためによく使用される方法です。私がより頻繁に使用するのは、方法 4 と方法 2 です。方法 2 は、継承によく使用されます。 ES5 の問題は、いくつかの新しいオブジェクトの列挙可能なプロパティを拡張できることです。defineProperty と何らかの関係があると感じていますが、まだよく理解していません。 上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
以上がJavaScript でオブジェクトを作成する 4 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。