談?wù)凧avaScript的New關(guān)鍵字
原型和閉包算是JavaScript中最常見(jiàn),最難以理解,最容易被當(dāng)做問(wèn)題的兩個(gè)部分,當(dāng)然還有它們的延伸,如作用域鏈,繼承等等吧,我最近也是各種看,各種翻,記錄點(diǎn)自己的心得,寫(xiě)寫(xiě)總會(huì)讓自己的理解更深一些。(跟標(biāo)題的關(guān)系不大啦,就感慨句,每次總感覺(jué)自己懂了,再翻還是收獲滿(mǎn)滿(mǎn))
先談一下JavaScript中New關(guān)鍵字吧,通常我們通過(guò)它來(lái)創(chuàng)建一個(gè)類(lèi)的實(shí)例對(duì)象,在JavaScript中,實(shí)例化對(duì)象之后,也就繼承了類(lèi)的屬性以及方法。通過(guò)代碼來(lái)演示一下
function Person(name){
this.name = name;
}
Person.age= "23";
Person.prototype.say = function(){
console.log("I'm " + this.name);
};
var person= new Person("王方");
console.log(
person.name, //王方
person.height //undefined
);
person.say(); //I'm 王方
console.log(
Person.name, //Person
Person.age//23
);
Person.say(); //Person.say is not a function
我們看下這一行
var person= new Person("王方");
new 到底做了什么呢?恩 JS引擎做的工作就是下面這樣
var obj = {};
obj.__proto__ = Person.prototype;
var result = Person.call(obj,"王方");
return typeof result === 'obj'? result : obj;
1.首先創(chuàng)建一個(gè)新對(duì)象
2.把obj的__proto__ 指向Person的原型對(duì)象prototype,此時(shí)便建立了obj對(duì)象的原型鏈:obj->Person.prototype->Object.prototype->null
3.在obj對(duì)象的執(zhí)行空間調(diào)用Person函數(shù)并傳遞參數(shù)“王方”。 相當(dāng)于var result = obj.Person("王方")。當(dāng)這句執(zhí)行完之后,obj便產(chǎn)生了屬性name并賦值為"王方"。
4.判斷返回值,如果無(wú)返回值或者返回一個(gè)非對(duì)象值,就將obj返回,否則講返回值作為新對(duì)象返回(有點(diǎn)繞口,三元運(yùn)算符,自己看下吧)
總結(jié):
Javascript的new關(guān)鍵字主要的作用是繼承,如上例子所言,但是要記住一點(diǎn),Person是一個(gè)函數(shù),而person是一個(gè)對(duì)象,至于函數(shù)與對(duì)象之間的區(qū)別,我有時(shí)間再寫(xiě)吧。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- javascript中new關(guān)鍵字詳解
- 不用構(gòu)造函數(shù)(Constructor)new關(guān)鍵字也能實(shí)現(xiàn)JavaScript的面向?qū)ο?/a>
- Javascript new關(guān)鍵字的玄機(jī) 以及其它
- js中的this關(guān)鍵字詳解
- javascript 常用關(guān)鍵字列表集合
- 調(diào)試Javascript代碼(瀏覽器F12及VS中debugger關(guān)鍵字)
- Javascript this關(guān)鍵字使用分析
- JQuery+JS實(shí)現(xiàn)仿百度搜索結(jié)果中關(guān)鍵字變色效果
- 用JS將搜索的關(guān)鍵字高亮顯示實(shí)現(xiàn)代碼
- 關(guān)鍵字空格替換為逗號(hào)的js代碼
相關(guān)文章
xml分頁(yè)+ajax請(qǐng)求數(shù)據(jù)源+dom取結(jié)果實(shí)例代碼
最近做的一個(gè)項(xiàng)目里的某個(gè)小功能,主要是為了方便選擇數(shù)據(jù) 演示地址:由于有惡意程序,所以去掉地址2008-10-10
千萬(wàn)不要錯(cuò)過(guò)的JavaScript高效對(duì)比數(shù)組差異方法
前端開(kāi)發(fā)中,我們通常需要對(duì)比兩個(gè)數(shù)組對(duì)象的差異。這其中有很多種方法,但是有些方法會(huì)帶來(lái)一些問(wèn)題,所以本文為大家準(zhǔn)備了一個(gè)高效方法,需要的可以參考一下2023-05-05
javascript實(shí)現(xiàn)TreeView 無(wú)刷新展開(kāi)的實(shí)例代碼
這篇文章介紹了javascript實(shí)現(xiàn)TreeView 無(wú)刷新展開(kāi)的實(shí)例代碼,有需要的朋友可以參考一下2013-07-07
詳解 javascript對(duì)象創(chuàng)建模式
這篇文章主要介紹了詳解 javascript對(duì)象創(chuàng)建模式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)JavaScript的相關(guān)知識(shí)。感興趣的朋友可以了解下2020-10-10
es6 filter() 數(shù)組過(guò)濾方法總結(jié)
這篇文章主要介紹了es6 filter() 數(shù)組過(guò)濾方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
IE與Firefox在JavaScript上的7個(gè)不同句法分享
盡管那需要用長(zhǎng)串的、沉悶的不同分支代碼來(lái)應(yīng)付不同瀏覽器的日子已經(jīng)過(guò)去,偶爾還是有必要做一些簡(jiǎn)單的區(qū)分和目標(biāo)檢測(cè)來(lái)確保某塊代碼能在用戶(hù)的機(jī)器上正常運(yùn)行2011-10-10
JavaScript實(shí)現(xiàn)自己的DOM選擇器原理及代碼
實(shí)現(xiàn)自己的DOM選擇器時(shí)匹配行為也應(yīng)該和瀏覽原生匹配行為一致,接下來(lái)本文將詳細(xì)介紹下實(shí)現(xiàn)思路及方法,感興趣的你可以參考下或許對(duì)你鞏固知識(shí)有所幫助2013-03-03

