You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
new 关键字会进行如下的操作:
创建一个空的简单JavaScript对象(即{});
链接该对象(即设置该对象的构造函数)到另一个对象 ;
将步骤1新创建的对象作为this的上下文 ;
如果该函数没有返回对象,则返回this。
当代码 new Foo(...) 执行时,会发生以下事情:
一个继承自 Foo.prototype 的新对象被创建。
使用指定的参数调用构造函数 Foo,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。
由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)
The text was updated successfully, but these errors were encountered:
原理:
要实现一个new, 首先要先了解new都干了些什么
new创建一个构造函数的实例,使其含有构造函数的属性,并且__proto__可以访问到构造函数原型链中的属性
(因为new 的时候就是这个么返回的,实例本来就是希望继承构造函数的属性,含有构造函数的原型的,并不希望得到的是构造函数的返回值)
-----------------------------------2020.8.16更新-----------------------------------
看了mdn的解释,感觉更清除一些
转自mdn:
The text was updated successfully, but these errors were encountered: