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