摘要:構造函數構造函數如用函數用來初始化使用運算符一個新建的對象,我們稱之為構造函數普通函數普通函數不使用運算符的函數就是普通函數構造函數普通函數從形式上看,一個函數被作為構造函數還是普通函數執行的唯一區別就是是否使用當以調用構造函數執行時,函數
構造函數
構造函數:如用函數用來初始化(使用new運算符)一個新建的對象,我們稱之為構造函數(constructor)
普通函數普通函數:不使用new運算符的函數就是普通函數
構造函數vs普通函數從形式上看,一個函數被作為構造函數還是普通函數執行的唯一區別就是是否使用new
function Person(){ this.name = "zqq"; this.age = 28; } var p = new Person();
當以new調用構造函數(執行var p = new Person())時,函數內部會發生以下情況:
1.創建一個空對象
var p = {};
2.this變量指向對象p
Person.call(p)
3.p繼承了構造函數Person()的原型
p.__proto__ = Person.prototype
4.執行構造函數Person()內的代碼
構造函數和普通函數的區別:1.構造函數使用new關鍵字調用;普通函數不用new關鍵字調用;
var p = new Person(); var p = Person();
2.構造函數內部可以使用this關鍵字;普通函數內部不建議使用this,因為這時候this指向的是window全局對象,這樣無意間就會為window添加了一些全局變量或函數
2.1 在構造函數內部,this指向的是構造出來的新對象 2.2 在普通函數內部,this指向的是window全局對象
3.構造函數默認不用return返回值;普通函數一般都有return返回值
3.1 構造函數會默認返回this,也就是新的實例對象 3.2 普通函數如果沒有return值的話,返回undefined 3.3 如果使用了return,那返回值會根據return值的類型而有所不同
(這里涉及到要了解的知識點有基本數據類型和引用類型的區別)
3.3.1 return的是五種簡單數據類型:String,Number,Boolean,Null,Undefined的話,構造函數會忽略return的值,依然返回this對象;而普通函數會返回return后面的值 function Person(){ var a; this.name = "zqq"; this.age = 28; return a; } var p = new Person();//返回this對象 var p = Person();//因為a沒初始化,所以a是undefined,而undefined屬于簡單數據類型,所以返回undefined,String,Number,Boolean,Null同理 3.3.2 如果return的是引用類型:Array,Date,Object,Function,RegExp,Error的話,構造函數和普通函數都會返回return后面的值 function Person(){ var arr = []; this.name = "zqq"; this.age = 28; return arr; } var p = new Person();//返回arr空數組,Date,Object,Function,RegExp,Error同理 var p1 = new Person();//返回arr空數組,Date,Object,Function,RegExp,Error同理
4.構造函數首字母建議大寫;普通函數首字母建議小寫
參考資料:
https://my.oschina.net/u/2395...
http://www.jb51.net/article/4...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86815.html
摘要:把這個執行上下文壓入調用棧的頂部,即設置成運行執行上下文。函數作為構造函數調用沒有繼承關系有繼承關系我們把一個函數被當作構造函數,使用操作符調用時發生的主要步驟新建一個普通對象,把其原型指向構造函數的屬性的值。把當前執行上下文彈出調用棧。 var currentTime = Date() 能生成一個當前時間的日期對象,var currentTime = new Date() 也能生成一...
摘要:前言文章主要基于高級程序設計總結的基本重寫了全文補充知識點新增實例優化排版新增檢測方法技巧用法構造函數創建一個用護定義的對象類型的實例或具有構造函數的內置對象類型之一命令執行構造函數返回一個實例對象構造函數一個指定對象實例的類型的函數傳慘一 前言 文章主要基于>總結的!!!PS: 2018/05/09 基本重寫了全文,補充知識點,新增實例,優化排版PS: 2018/05/11 新增檢測...
摘要:不可以當作構造函數,也就是說,不可以使用命令,否則會拋出一個錯誤。正是因為它沒有,所以也就不能用作構造函數。總結箭頭函數的永遠指向其上下文的,任何方法都改變不了其指向,如普通函數的指向調用它的那個對象 一、前言 首先看下直觀的區別 // 箭頭函數 let fun = () => { console.log(lalalala); } ...
摘要:我們將通過一個構造函數創建的對象,稱為是該類的實例孫悟空男玉兔精女奔波霸男使用可以檢查一個對象是否是一個類的實例語法對象構造函數如果是,則返回,否則返回所有的對象都是的后代,所以任何對象和做檢查時都會返回 使用對象字面量模式來創建一個對象 (它也叫單例模式 //JS與其他語言的單例模式有很大的區別(如Java),但這就是語言的區別) var obj = {}; ...
摘要:工廠方法模式工廠方法模式是一種設計模式,指的是讓具體的工廠對象負責生產具體的產品對象。在我們使用構造函數創建對象的時候,我們每次時,都將創建一個新的對象,而如果我們通過靜態工廠方法時,我們可以返回系統中已存在的對象。 目錄: 普通構造方法與靜態工廠方法 靜態工廠方法與設計模式中的工廠方法區別 靜態工廠方法的優勢 靜態工廠方法的缺點 普通構造方法與靜態工廠方法 普通構造方法創建對象...
閱讀 3766·2021-11-11 11:02
閱讀 3496·2021-10-11 10:57
閱讀 3608·2021-09-22 16:00
閱讀 1843·2021-09-02 15:15
閱讀 1322·2019-08-30 15:56
閱讀 1005·2019-08-30 15:54
閱讀 2731·2019-08-30 12:43
閱讀 3539·2019-08-29 16:06