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.
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() // 小明
从上面的例子中我们可以得出以下结论:
new
通过构造函数Person
创建出来的实例对象可以访问到构造函数中的属性。
new
通过构造函数Person
创建出来的实例可以访问到构造函数原型链中的属性,也就是说通过new
操作符,实例与构造函数通过原型链连接了起来。
构造函数 Person
并没有显式 return
任何值(默认返回 undefined
),如果我们让它返回值会发生什么事情呢?
function Person(name) { this.name = name return 1 } const t = new Person('小明') console.log(t.name) // 小明
在上述例子中的构造函数中返回了 1
,但是这个返回值并没有任何的用处,得到的结果还是和之前的例子完全一样。我们又可以得出一个结论:
构造函数如果返回原始值,那么这个返回值毫无意义。
我们再来试试返回对象会发生什么:
function Person(name) { this.name = name return {age: 23} } const t = new Person('小明') console.log(t) // { age: 23 } console.log(t.name) // undefined
通过上面这个例子我们可以发现,当返回值为对象时,这个返回值就会被正常的返回出去。我们再次得出了一个结论:
构造函数如果返回值为对象,那么这个返回值会被正常使用。
总结:这两个例子告诉我们,构造函数尽量不要返回值。因为返回原始值不会生效,返回对象会导致 new 操作符没有作用。
首先我们要清楚,在使用 new
function _new(fn, ...args) { const newObj = Object.create(fn.prototype); const value = fn.apply(newObj, args); return value instanceof Object ? value : newObj; }
< ul>new
Das über den KonstruktorPerson
erstellte Instanzobjekt kann auf die Eigenschaften im Konstruktor zugreifen.new
Die durch den KonstruktorPerson
erstellte Instanz kann auf die Eigenschaften in der Konstruktor-Prototypenkette zugreifen, also übernew
Operatoren , Instanzen und Konstruktoren sind über die Prototypenkette verbunden.
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(); // 小明
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:
🎜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. 🎜
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!