Heim > Web-Frontend > js-Tutorial > Wissen Sie, was js macht, wenn ein Objekt neu ist?

Wissen Sie, was js macht, wenn ein Objekt neu ist?

藏色散人
Freigeben: 2023-04-18 15:36:45
nach vorne
2048 Leute haben es durchsucht

Vorwort

In JavaScript kann ein Instanzobjekt über den neuen Operator erstellt werden, und dieses Instanzobjekt erbt die Eigenschaften und Methoden des ursprünglichen Objekts. Daher besteht die Bedeutung der Existenz von new darin, dass es die Vererbung in JavaScript implementiert und nicht nur ein Objekt instanziiert.

Die Rolle von new

Lassen Sie uns zunächst die Rolle von new anhand von Beispielen verstehen. Die Beispiele lauten wie folgt: new 的作用,示例如下:

function Person(name) {
  this.name = name
}
Person.prototype.sayName = function () {
  console.log(this.name)
}
const t = new Person('小明')
console.log(t.name)  // 小明
t.sayName()  // 小明
Nach dem Login kopieren

从上面的例子中我们可以得出以下结论:

  • new 通过构造函数 Person 创建出来的实例对象可以访问到构造函数中的属性。

  • new 通过构造函数 Person 创建出来的实例可以访问到构造函数原型链中的属性,也就是说通过 new 操作符,实例与构造函数通过原型链连接了起来。

构造函数 Person 并没有显式 return 任何值(默认返回 undefined),如果我们让它返回值会发生什么事情呢?

function Person(name) {
  this.name = name
  return 1
}
const t = new Person('小明')
console.log(t.name)  // 小明
Nach dem Login kopieren

在上述例子中的构造函数中返回了 1,但是这个返回值并没有任何的用处,得到的结果还是和之前的例子完全一样。我们又可以得出一个结论:

构造函数如果返回原始值,那么这个返回值毫无意义。

我们再来试试返回对象会发生什么:

function Person(name) {
  this.name = name
  return {age: 23}
}
const t = new Person('小明')
console.log(t)  // { age: 23 }
console.log(t.name)  // undefined
Nach dem Login kopieren

通过上面这个例子我们可以发现,当返回值为对象时,这个返回值就会被正常的返回出去。我们再次得出了一个结论:

构造函数如果返回值为对象,那么这个返回值会被正常使用。

总结:这两个例子告诉我们,构造函数尽量不要返回值。因为返回原始值不会生效,返回对象会导致 new 操作符没有作用。

实现 new

首先我们要清楚,在使用 new

function _new(fn, ...args) {
  const newObj = Object.create(fn.prototype);
  const value = fn.apply(newObj, args);
  return value instanceof Object ? value : newObj;
}
Nach dem Login kopieren

Aus den obigen Beispielen können wir die folgenden Schlussfolgerungen ziehen:
    < ul>
  1. new Das über den Konstruktor Person erstellte Instanzobjekt kann auf die Eigenschaften im Konstruktor zugreifen.
  2. new Die durch den Konstruktor Person erstellte Instanz kann auf die Eigenschaften in der Konstruktor-Prototypenkette zugreifen, also über new Operatoren , Instanzen und Konstruktoren sind über die Prototypenkette verbunden.
Der Konstruktor Person gibt explizit keinen Wert zurück (Standard gibt undefiniert zurück), wenn wir Was tun passiert, wenn es einen Wert zurückgibt?

function Person(name) {
  this.name = name;
}
Person.prototype.sayName = function () {
  console.log(this.name);
};

const t = _new(Person, "小明");
console.log(t.name);  // 小明
t.sayName();  // 小明
Nach dem Login kopieren
Der Konstruktor im obigen Beispiel hat 1 zurückgegeben, aber dieser Rückgabewert ist nutzlos und das Ergebnis ist genau das gleiche wie im vorherigen Beispiel. Wir können eine andere Schlussfolgerung ziehen:

Wenn der Konstruktor den ursprünglichen Wert zurückgibt, ist der Rückgabewert bedeutungslos.

Lassen Sie uns versuchen, was passiert, wenn das Objekt zurückgegeben wird:
rrreee🎜Anhand des obigen Beispiels können wir feststellen, dass der Rückgabewert normal zurückgegeben wird, wenn der Rückgabewert ein Objekt ist. Wir sind erneut zu dem Schluss gekommen: 🎜
🎜Wenn der Rückgabewert des Konstruktors ein Objekt ist, wird der Rückgabewert normal verwendet. 🎜
🎜Zusammenfassung: Diese beiden Beispiele zeigen uns, dass Konstruktoren versuchen sollten, keine Werte zurückzugeben. Da die Rückgabe des ursprünglichen Werts keine Wirkung zeigt, führt die Rückgabe des Objekts dazu, dass der neue Operator keine Wirkung hat. 🎜

Um new zu implementieren🎜🎜Zunächst müssen wir wissen, was js tut, wenn der Operator new verwendet wird: 🎜🎜🎜js wird intern erstellt An Objekt🎜🎜Dieses Objekt kann auf die Eigenschaften des Konstruktor-Prototyps zugreifen, daher muss das Objekt mit dem Konstruktor verbunden werden🎜🎜Dies innerhalb des Konstruktors wird dem neuen Objekt zugewiesen (das heißt, dies zeigt auf das neue Objekt)🎜🎜Zurückgeben Der ursprüngliche Wert muss ignoriert werden, das zurückgegebene Objekt muss normal verarbeitet werden die Rolle des neuen Operators in JavaScript und wie man einen neuen Operator implementiert. 🎜🎜

Das obige ist der detaillierte Inhalt vonWissen Sie, was js macht, wenn ein Objekt neu ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.im
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage