JavaScript中的prototype使用說明
在JavaScript中并沒有類的概念,但JavaScript中的確可以實(shí)現(xiàn)重載,多態(tài),繼承。這些實(shí)現(xiàn)其實(shí)方法都可以用JavaScript中的引用和變量作用域結(jié)合prototype來解釋。
2、簡(jiǎn)單的例子
var Blog = function( name, url ){
this.name = name;
this.url = url;
};
Blog.prototype.jumpurl = '';
Blog.prototype.jump = function(){
window.location = this.jumpurl;
};
/*
*等同于
Blog.prototype = {
jumpurl : '',
jump : function(){
window.location = this.jumpurl;
}
};
*/
var rainman = new Blog('jb51', 'http://www.dbjr.com.cn');
var test = new Blog('server', 'http://s.jb51.net');
這是一個(gè)非常簡(jiǎn)單的例子,但卻可以很好的解釋prototype內(nèi)在的一些東西,先看下圖的內(nèi)存分配:

通過上圖可以看到下面這些內(nèi)容:
prototype只是函數(shù)的一個(gè)屬性,該屬性的類型是一個(gè)對(duì)象。
內(nèi)存分配狀況:
函數(shù)Blog擁有一個(gè)prototype屬性,而prototype屬性擁有一個(gè)變量和一個(gè)函數(shù);
test和rainman兩個(gè)變量都分別有name和url兩個(gè)變量;
test和rainman兩個(gè)變量都有一個(gè)jumpUrl變量和一個(gè)jump函數(shù),但是并沒有分配內(nèi)存,它們是對(duì)Blog.protype中的引用
3、擴(kuò)展1:
Website.prototype = Blog.prototype
var Blog = function( name, url ){
this.name = name;
this.url = blogurl;
};
Blog.prototype.jumpurl = '';
Blog.prototype.jump = function(){
window.location = this.jumpurl;
};
var rainman = new Blog('jb51', 'http://www.dbjr.com.cn');
var test = new Blog('server', 'http://s.jb51.net');
var Website = function(){};
Website.prototype = Blog.prototype;
var mysite = new Website();

通過上圖可以看到下面這些內(nèi)容:
"Website.prototype = Blog.prototype;":Website的prototype并沒有分配內(nèi)存,只是引用了Blog的prototype屬性。
mysite的兩個(gè)屬性也沒有分配內(nèi)存,也只是分別引用了Blog.prototype.jumpurl和Blog.prototype.jump
4、擴(kuò)展2:
Website.prototype = new Blog()
var Blog = function(){};
Blog.prototype.jumpurl = '';
Blog.prototype.jump = function(){
window.location = this.jumpurl;
};
var Website = function(){};
Website.prototype = new Blog();
var mysite = new Website();

通過上圖可以看到下面這些內(nèi)容:
Website的prototype屬性,只是Blog的一個(gè)實(shí)例( 同rainman=new Blog(); );因此Website的prototype屬性就具有了jumpurl變量和jump方法了。
mysite是Website的一個(gè)實(shí)例,它的jumpurl和jump方法是繼承自Website的prototype,而Web.prototype繼承自Blog.prototype(這里與其說是繼承,不如說是引用)
整段程序在運(yùn)行的過程中,內(nèi)存中只分配了一個(gè)jumpurl變量和一個(gè)jump方法
5、new運(yùn)算符
JavaScript中new運(yùn)算符。
JavaScript中new運(yùn)算符是創(chuàng)建一個(gè)新對(duì)象。使用方法:
new constructor[(arguments)]
其中constructor是必選項(xiàng)。對(duì)象的構(gòu)造函數(shù)。如果構(gòu)造函數(shù)沒有參數(shù),則可以省略圓括號(hào)。
arguments是可選項(xiàng)。任意傳遞給新對(duì)象構(gòu)造函數(shù)的參數(shù)。
JavaScript中new運(yùn)算符說明
new 運(yùn)算符執(zhí)行下面的任務(wù):
創(chuàng)建一個(gè)沒有成員的對(duì)象。
為那個(gè)對(duì)象調(diào)用構(gòu)造函數(shù),傳遞一個(gè)指針給新創(chuàng)建的對(duì)象作為 this 指針。
然后構(gòu)造函數(shù)根據(jù)傳遞給它的參數(shù)初始化該對(duì)象。
示例
下面這些是有效的 new 運(yùn)算符的用法例子。
my_object = new Object;
my_array = new Array();
my_date = new Date("Jan 5 1996");
6、其它
在絕大多數(shù)JavaScript版本中,JS引擎都會(huì)給每個(gè)函數(shù)一個(gè)空的原型對(duì)象,即prototype屬性。
- js中繼承的幾種用法總結(jié)(apply,call,prototype)
- js中的hasOwnProperty和isPrototypeOf方法使用實(shí)例
- JavaScript prototype 使用介紹
- js中prototype用法詳細(xì)介紹
- 詳解Javascript中prototype屬性(推薦)
- Javascript中Array.prototype.map()詳解
- JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的區(qū)別和應(yīng)用場(chǎng)景簡(jiǎn)述
- 判斷js中各種數(shù)據(jù)的類型方法之typeof與0bject.prototype.toString講解
- JavaScript函數(shù)及其prototype詳解
相關(guān)文章
JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法(兼容IE與FireFox)
這篇文章主要介紹了JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法,涉及javascript與iframe交互動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2016-06-06簡(jiǎn)述JS中forEach()、map()、every()、some()和filter()的用法
JS中常常需要對(duì)數(shù)組進(jìn)行遍歷、迭代操作,而我們常用的就是for語(yǔ)句對(duì)數(shù)組進(jìn)行迭代,下面這篇文章主要給大家介紹了關(guān)于JS中forEach()、map()、every()、some()和filter()的用法,需要的朋友可以參考下2022-05-05JS面向?qū)ο螅?)之Object類,靜態(tài)屬性,閉包,私有屬性, call和apply的使用,繼承的三種實(shí)現(xiàn)方法
這篇文章主要介紹了JS面向?qū)ο螅?)之Object類,靜態(tài)屬性,閉包,私有屬性, call和apply的使用,繼承的三種實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-02-02JS聲明對(duì)象時(shí)屬性名加引號(hào)與不加引號(hào)的問題及解決方法
這篇文章主要介紹了JS聲明對(duì)象時(shí)屬性名加引號(hào)與不加引號(hào)的問題及解決方法,需要的朋友可以參考下2018-02-02Javascript 浮點(diǎn)運(yùn)算精度問題分析與解決
浮點(diǎn)數(shù)的精度問題不是JavaScript特有的,因?yàn)橛行┬?shù)以二進(jìn)制表示位數(shù)是無窮的2014-03-03JavaScript中無法通過div.style.left獲取值的解決方法
這篇文章主要介紹了JavaScript中無法通過div.style.left獲取值的問題分析及解決方法,需要的朋友可以參考下2017-02-02JS小功能(onmouseover實(shí)現(xiàn)選擇月份)實(shí)例代碼
這篇文章主要介紹了onmouseover實(shí)現(xiàn)選擇月份實(shí)例代碼,有需要的朋友可以參考一下2013-11-11發(fā)一個(gè)數(shù)據(jù)過濾的代碼,很簡(jiǎn)單,有用的著的拿去
發(fā)一個(gè)數(shù)據(jù)過濾的代碼,很簡(jiǎn)單,有用的著的拿去...2007-02-02使用jscript實(shí)現(xiàn)二進(jìn)制讀寫腳本代碼
Reading And Writing Binary Files Using JScript正如我剛才推什么我能做的JScript中,我想出了對(duì)問題的二進(jìn)制文件。以下級(jí)的解決,這為小到中等大小的文件。我的部分包括這個(gè)職位在這里,因?yàn)槲壹磳⒏吨T表決,在一個(gè)職位約發(fā)送帶有附件的電郵通過JScript和它會(huì)使用這個(gè)二進(jìn)制文件碼來讀取,在二進(jìn)制附件檔案。2008-06-06