當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
js中的new file_JS中的new操作符
生活随笔
收集整理的這篇文章主要介紹了
js中的new file_JS中的new操作符
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、什么是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幫我們做了這樣幾件事:
三、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操作符幫我們做了四件事:
總結
以上是生活随笔為你收集整理的js中的new file_JS中的new操作符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 查看锁_别吵吵,分布式锁也是
- 下一篇: js map对象遍历_何时使用 Map