十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
javascript不需要搭建任何開發(fā)環(huán)境!一個(gè)記事本就可以搞定了!如果你是前端開發(fā)人員,專業(yè)點(diǎn)可以用Dreamweaver,如果你是后端開發(fā)人員就要看你是用什么后臺(tái)語(yǔ)言而定!
寬城網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
VS2010中沒有專門的
JavaScript
工程可以創(chuàng)建的。
編寫JavaScript很簡(jiǎn)單的,直接添加一個(gè)JavaScript文件到你的工程中,然后編譯此文件就可以了。當(dāng)然,一般是在
ASP.NET
的工程中使用。
今天小編要跟大家分享的文章是關(guān)于Web前端工程師應(yīng)該知道的JavaScript
創(chuàng)建對(duì)象的方式。JavaScript創(chuàng)建對(duì)象的方式有很多,通過Object構(gòu)造函數(shù)或?qū)ο笞置媪康姆绞揭部梢詣?chuàng)建單個(gè)對(duì)象,顯然這兩種方式會(huì)產(chǎn)生大量的重復(fù)代碼,并不適合量產(chǎn)。下面小編為大家介紹一些非常經(jīng)典的創(chuàng)建對(duì)象的方式,他們也各有優(yōu)缺點(diǎn)。我們一起來看一看吧!
1、工廠模式
functioncreatePerson(name,job){varo=newObject()
o.name=name
o.job=job
o.sayName=function(){console.log(this.name)
}returno
}varperson1=createPerson('Jiang','student')varperson2=createPerson('X','Doctor')
可以無數(shù)次調(diào)用這個(gè)工廠函數(shù),每次都會(huì)返回一個(gè)包含兩個(gè)屬性和一個(gè)方法的對(duì)象
工廠模式雖然解決了創(chuàng)建多個(gè)相似對(duì)象的問題,但是沒有解決對(duì)象識(shí)別問題,即不能知道一個(gè)對(duì)象的類型
2、構(gòu)造函數(shù)模式
functionPerson(name,job){this.name=namethis.job=jobthis.sayName=function(){console.log(this.name)
}
}varperson1=newPerson('Jiang','student')varperson2=newPerson('X','Doctor')
沒有顯示的創(chuàng)建對(duì)象,使用new來調(diào)用這個(gè)構(gòu)造函數(shù),使用new后會(huì)自動(dòng)執(zhí)行如下操作
·創(chuàng)建一個(gè)新對(duì)象
·這個(gè)新對(duì)象會(huì)被執(zhí)行[[prototype]]鏈接
·這個(gè)新對(duì)象會(huì)綁定到函數(shù)調(diào)用的this
·返回這個(gè)對(duì)象
使用這個(gè)方式創(chuàng)建對(duì)象可以檢測(cè)對(duì)象類型
person1instanceofObject//trueperson1instanceofPerson//true
但是使用構(gòu)造函數(shù)創(chuàng)建對(duì)象,每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一次
3、原型模式
functionPerson(){
}
Person.prototype.name='Jiang'Person.prototype.job='student'Person.prototype.sayName=function(){console.log(this.name)
}varperson1=newPerson()
將信息直接添加到原型對(duì)象上。使用原型的好處是可以讓所有的實(shí)例對(duì)象共享它所包含的屬性和方法,不必在構(gòu)造函數(shù)中定義對(duì)象實(shí)例信息。
原型是一個(gè)非常重要的概念,在一篇文章看懂proto和prototype的關(guān)系及區(qū)別中講的非常詳細(xì)
更簡(jiǎn)單的寫法
functionPerson(){
}
Person.prototype={
ame:'jiang',
job:'student',
sayName:function(){console.log(this.name)
}
}varperson1=newPerson()
將Person.prototype設(shè)置為等于一個(gè)以對(duì)象字面量形式創(chuàng)建的對(duì)象,但是會(huì)導(dǎo)致.constructor不在指向Person了。
使用這種方式,完全重寫了默認(rèn)的Person.prototype對(duì)象,因此.constructor也不會(huì)存在這里
Person.prototype.constructor===Person//false
如果需要這個(gè)屬性的話,可以手動(dòng)添加
functionPerson(){
}
Person.prototype={
constructor:Person
ame:'jiang',
job:'student',
sayName:function(){
console.log(this.name)
}
}
不過這種方式還是不夠好,應(yīng)為constructor屬性默認(rèn)是不可枚舉的,這樣直接設(shè)置,它將是可枚舉的。所以可以時(shí)候,Object.defineProperty方法
Object.defineProperty(Person.prototype,'constructor',{
enumerable:false,
value:Person
})
缺點(diǎn)
使用原型,所有的屬性都將被共享,這是個(gè)很大的優(yōu)點(diǎn),同樣會(huì)帶來一些缺點(diǎn)
原型中所有屬性實(shí)例是被很多實(shí)例共享的,這種共享對(duì)于函數(shù)非常合適。對(duì)于那些包含基本值的屬性也勉強(qiáng)可以,畢竟實(shí)例屬性可以屏蔽原型屬性。但是引用類型值,就會(huì)出現(xiàn)問題了
functionPerson(){
}
Person.prototype={
ame:'jiang',
friends:['Shelby','Court']
}varperson1=newPerson()varperson2=newPerson()
person1.friends.push('Van')console.log(person1.friends)//["Shelby","Court","Van"]console.log(person2.friends)//["Shelby","Court","Van"]console.log(person1.friends===person2.friends)//true
friends存在與原型中,實(shí)例person1和person2指向同一個(gè)原型,person1修改了引用的數(shù)組,也會(huì)反應(yīng)到實(shí)例person2中
4、組合使用構(gòu)造函數(shù)模式和原型模式
這是使用最為廣泛、認(rèn)同度最高的一種創(chuàng)建自定義類型的方法。它可以解決上面那些模式的缺點(diǎn)
使用此模式可以讓每個(gè)實(shí)例都會(huì)有自己的一份實(shí)例屬性副本,但同時(shí)又共享著對(duì)方法的引用
這樣的話,即使實(shí)例屬性修改引用類型的值,也不會(huì)影響其他實(shí)例的屬性值了
functionPerson(name){this.name=namethis.friends=['Shelby','Court']
}
Person.prototype.sayName=function(){console.log(this.name)
}varperson1=newPerson()varperson2=newPerson()
person1.friends.push('Van')console.log(person1.friends)//["Shelby","Court","Van"]console.log(person2.friends)//["Shelby","Court"]console.log(person1.friends===person2.friends)//false
5、動(dòng)態(tài)原型模式
動(dòng)態(tài)原型模式將所有信息都封裝在了構(gòu)造函數(shù)中,初始化的時(shí)候,通過檢測(cè)某個(gè)應(yīng)該存在的方法時(shí)候有效,來決定是否需要初始化原型
functionPerson(name,job){//屬性
this.name=namethis.job=job//方法
if(typeofthis.sayName!=='function'){
Person.prototype.sayName=function(){console.log(this.name)
}
}
}varperson1=newPerson('Jiang','Student')
person1.sayName()
只有在sayName方法不存在的時(shí)候,才會(huì)將它添加到原型中。這段代碼只會(huì)初次調(diào)用構(gòu)造函數(shù)的時(shí)候才會(huì)執(zhí)行。
此后原型已經(jīng)完成初始化,不需要在做什么修改了
這里對(duì)原型所做的修改,能夠立即在所有實(shí)例中得到反映
其次,if語(yǔ)句檢查的可以是初始化之后應(yīng)該存在的任何屬性或方法,所以不必用一大堆的if語(yǔ)句檢查每一個(gè)屬性和方法,只要檢查一個(gè)就行
6、寄生構(gòu)造函數(shù)模式
這種模式的基本思想就是創(chuàng)建一個(gè)函數(shù),該函數(shù)的作用僅僅是封裝創(chuàng)建對(duì)象的代碼,然后再返回新建的對(duì)象
functionPerson(name,job){varo=newObject()
o.name=name
o.job=job
o.sayName=function(){console.log(this.name)
}returno
}varperson1=newPerson('Jiang','student')
person1.sayName()
這個(gè)模式,除了使用new操作符并把使用的包裝函數(shù)叫做構(gòu)造函數(shù)之外,和工廠模式幾乎一樣
構(gòu)造函數(shù)如果不返回對(duì)象,默認(rèn)也會(huì)返回一個(gè)新的對(duì)象,通過在構(gòu)造函數(shù)的末尾添加一個(gè)return語(yǔ)句,可以重寫調(diào)用構(gòu)造函數(shù)時(shí)返回的值
7、穩(wěn)妥構(gòu)造函數(shù)模式
首先明白穩(wěn)妥對(duì)象指的是沒有公共屬性,而且其方法也不引用this。
穩(wěn)妥對(duì)象最適合在一些安全環(huán)境中(這些環(huán)境會(huì)禁止使用this和new),或防止數(shù)據(jù)被其他應(yīng)用程序改動(dòng)時(shí)使用
穩(wěn)妥構(gòu)造函數(shù)模式和寄生模式類似,有兩點(diǎn)不同:一是創(chuàng)建對(duì)象的實(shí)例方法不引用this,而是不使用new操作符調(diào)用構(gòu)造函數(shù)
functionPerson(name,job){varo=newObject()
o.name=name
o.job=job
o.sayName=function(){console.log(name)
}returno
}varperson1=Person('Jiang','student')
person1.sayName()
和寄生構(gòu)造函數(shù)模式一樣,這樣創(chuàng)建出來的對(duì)象與構(gòu)造函數(shù)之間沒有什么關(guān)系,instanceof操作符對(duì)他們沒有意義。
以上就是小編跟大家分享的關(guān)于JavaScript
創(chuàng)建對(duì)象的方式的文章,希望本篇文章能夠?qū)φ趶氖聎eb相關(guān)工作的小伙伴們有所幫助。想要了解更多web相關(guān)知識(shí)記得關(guān)注北大青鳥web培訓(xùn)官網(wǎng)。最后祝愿小伙伴們工作順利!
*聲明:內(nèi)容與圖片均來源于網(wǎng)絡(luò)(部分內(nèi)容有修改),版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜。
只要有個(gè)網(wǎng)頁(yè)瀏覽器以及一個(gè)文本編輯器(比如記事本)即可,這些都是操作系統(tǒng)自帶的,所以基本上不需要安裝什么軟件就能開發(fā)JavaScript。
當(dāng)然,如果需要測(cè)試代碼在網(wǎng)站上的實(shí)際效果,就要搭建服務(wù)器環(huán)境,比如IIS、Apache等等,也可以使用一些輕量級(jí)的服務(wù)器模擬器,比如NetBox。
為了考察代碼在不同瀏覽器的兼容性,最好安裝多種不同內(nèi)核的瀏覽器,比如Chrome、FireFox,IE則要看你的目的受眾范圍而選擇IE6/7/8或者IE9+。
當(dāng)然,初學(xué)者直接用記事本來寫代碼可能會(huì)有困難,那么可以選擇一些支持代碼編寫的高級(jí)文本編輯器,比如EditPlus、UltraEdit等。
新建一個(gè)記事本文件,寫入js代碼,保存時(shí)將后綴改為.js。
使用開發(fā)專用的文本編輯器,新建文件,選擇文件類型為javascript,寫入內(nèi)容,并保存。
安裝了node.js之后,使用webstorm9創(chuàng)建node項(xiàng)目自動(dòng)會(huì)配置node的路徑。
在file菜單中有settings或default settings菜單打開這個(gè)菜單項(xiàng),可以設(shè)置node路徑。