js中new操作符
1.什么是new?
在JS中,new的作用是通過構(gòu)造函數(shù)來創(chuàng)建一個實例對象(和普通函數(shù)不一樣,當函數(shù)用作構(gòu)造函數(shù)時,首字母一般要大寫)
function Foo(name) {this.name = name; } console.log("new Foo('mm')的類型:",typeof new Foo('mm')); // object console.log("Foo的類型:",typeof Foo); // function?2.new經(jīng)歷了什么過程?
Foo明明只是一個函數(shù),可是為什么new Foo()執(zhí)行后會突然返回一個對象呢?
我們從結(jié)果出發(fā)可以推斷出,既然返回了一個對象,那么這事肯定和對象有關(guān)系。
實際上new幫我們做了這樣幾件事:
3.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);?
分析:
首先預編譯,聲明提升,解釋執(zhí)行。
執(zhí)行時按照順序來進行,
- obj指向空對象;
- obj的原型地址指向構(gòu)造函數(shù)Foo的原型對象;
- 執(zhí)行Foo.call(obj, 'mm');
- this.name = name;?通過函數(shù)的call方法將this綁定到obj(也就是說this就是obj),實參mm傳入構(gòu)造函數(shù)Foo中,這樣this.name = 'mm',那么obj.name = 'mm',也就是說name屬性被掛載到obj對象上。
- return this;?就是return obj,這樣obj這個對象就被返回出來了。
- 將結(jié)果賦值給變量foo。
- 打印結(jié)果。
?
總結(jié)
- 上一篇: c++能干什么_「CG原画插画教程」学画
- 下一篇: 计算机控制系统课程设计中期报告,课程设计