论坛网站推广方案,手机禁止网站跳转页面,桂林做手机网站设计,绵阳网站建设费用一、什么是new#xff1f;众所周知#xff0c;在JS中#xff0c;new的作用是通过构造函数来创建一个实例对象。像下面这样#xff1a;(和普通函数不一样#xff0c;当函数用作 构造函数 时#xff0c;首字母一般要大写#xff0c;以作区分。)function Foo(name) { th…一、什么是new众所周知在JS中new的作用是通过构造函数来创建一个实例对象。像下面这样(和普通函数不一样当函数用作 构造函数 时首字母一般要大写以作区分。)function Foo(name) { this.name name;}console.log(new Foo(mm)的类型,typeof new Foo(mm)); // objectconsole.log(Foo的类型,typeof Foo); // function二、new经历了什么过程Foo明明只是一个函数可是为什么new Foo()执行后会突然返回一个对象呢我们从结果出发可以推断出既然返回了一个对象那么这事肯定和 对象 有关系。实际上new帮我们做了这样几件事帮我们创建了一个空对象例如obj将空对象原型的内存地址 __proto__ 指向函数的原型对象(这里涉及到了 原型链 的知识)利用函数的call方法将原本指向window的绑定对象this指向了obj。(这样一来当我们向函数中再传递实参时对象的属性就会被挂载到obj上。)利用函数返回对象obj。三、new的过程分析function Foo(name) { this.name name; return this;}var obj {};obj.__proto__ Foo.prototype;// Foo.call(obj, mm);var foo Foo.call(obj, mm);console.log(foo);分析首先预编译声明提升解释执行。执行时按照顺序来进行obj指向空对象obj的原型地址指向构造函数Foo的原型对象执行 Foo.call(obj, mm);this.name name; 通过函数的 call方法 将this绑定到obj(也就是说this就是obj),实参mm传入构造函数Foo中这样this.name ‘mm’那么obj.name ‘mm’也就是说name属性被挂载到obj对象上。return this; 就是return obj这样obj这个对象就被返回出来了。将结果赋值给变量foo。打印结果。四、总结第三部分的代码直接用 new 构造函数 效果是相同的。function Foo(name) { this.name name;}var foo new Foo(mm);console.log(foo);简而言之new操作符帮我们做了四件事创建空对象空对象的原型指针指向构造函数的原型对象利用函数的call方法改变this指向在空对象上挂载属性或方法返回对象。