new操作符具体做了什么?
🎈创建了一个空的对象
function Foo(){ } console.log(new Foo());
从上图中返回了一个对象,可以看出 Foo()为一个对象
✨将空对象的原型,指向于构造函数的原型
function Foo(){ } console.log(Foo.prototype == new Foo().__proto__);
显示结果 为true
🍧将空对象作为构造函数的上下文(改变this指向)
🍄未使用new操作符时的this
function Foo(){ console.log(this); this.name = '张三' } console.log(Foo());
从上述中我们可以发现 此时构造函数的this为整个window,而window对象下并没有name,所以报出undefined(函数Foo()并没有执行return)
🍄使用new操作符时的this
function Foo(){ console.log(this); this.name = '张三' } console.log(new Foo());
此时,this即指向了 new Foo()这个对象
🌋对构造函数有返回值的处理判断
🍬返回基本类型
Number类型、String类型、Boolean类型、Null类型、Undefined类型、Biglnt类型;字符串类型、符号类型。
function Foo(){ this.name = '张三' return true; } console.log(new Foo()); ································ function Test(){ this.name = '张三' return 111; } console.log(new Test());
可以看出:如果构造函数返回基本类型,则忽略返回值
🍬返回引用类型
Object、Array、Function
function Foo(){ this.name = '张三' return {}; } console.log(new Foo());
可以看出:如果构造函数返回引用类型,则new操作符 无效
🎉🎉🎉如有错误,请评论指出,thankyou~🎀🎀🎀
✨✨✨创作不易,如对您有帮助,欢迎给博主点赞收藏,给予鼓励哟💛