Beim Instanziieren eines Objekts in JavaScript besteht unsere übliche Methode darin, den neuen Operator zu verwenden. Dieser Artikel teilt Ihnen hauptsächlich die detaillierte Erklärung des neuen Operators in JavaScript mit und hofft, Ihnen dabei zu helfen.
var Foo = function(x, y) { this.x = x this.y = y }var foo = new Foo(1, 2) // Foo {x: 1, y: 2}
Was genau macht der neue Betreiber? Wir können einen Blick darauf werfen, was für ein Objekt foo ist.
Erstens ist foo selbst ein Objekt und dann hat es zwei Attribute, x und y. Gleichzeitig können wir in der Konsole der meisten Browser auch ein etwas leichteres Attribut namens __proto__ sehen. Es verfügt über zwei Attribute: Konstruktor und __proto__.
__proto__ ist eine Accessor-Eigenschaft. Es verweist auf den [[Prototyp]] des aktuellen Objekts selbst. Es handelt sich lediglich um ein Symbol, das das Prototypobjekt Foo.prototype des Konstruktors Foo darstellt Beschreibung auf MDN.
So einfach ist es nicht.foo.__proto__ === Foo.prototype // true
Wir wissen, dass der neue Operator eine Funktion ausführt. Im obigen Beispiel gibt die Funktion Foo keinen expliziten Wert zurück, sodass der Rückgabewert nach der Ausführung dieser Funktion undefiniert ist. Wenn der Konstruktor einen Wert nicht explizit zurückgibt, wird nach dem Ausführen der neuen Operation das vom Konstruktor instanziierte Objekt zurückgegeben.
var Foo = function(x, y) { this.x = x this.y = y }// 1. 创建一个空对象var foo = {}// 2. 调用构造函数,并且将构造函数的`this`指向fooFoo.call(foo, 1, 2)// 3. foo继承Foo的原型对象foo.__proto__ = Foo.prototype
gibt einen Wert zurück. Besonderes Augenmerk sollte auf die Tatsache gelegt werden, dass, wenn das, was Sie im Konstruktor zurückgeben, kein Objekt, sondern ein gewöhnlicher Wert, wie z. B. ein Zahlen- oder String-Wert, ist, was nach new zurückgegeben wird, immer noch ein Instanziierung. Objekt danach.
var Foo = function(x, y) { this.x = x this.y = y return { a: this.x } }var foo = new Foo(1, 2) // {a: 1}
Der Unterschied zwischen dem neuen Aufruf der JS-Funktion und diesem im normalen Aufruf
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des neuen Operators in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!