国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

Js中對象內部函數問題

2024-04-27 15:08:20
字體:
來源:轉載
供稿:網友

總述

Js基本上是每一個開發人員或多或少都得學習的一門編程語言。沒錯就是編程語言。本人這些天開始學習對js進行系統性的學習。突然發現了一個比較有意思的問題。就是js中對象中函數的問題。發現這個問題之后,筆者使用java中的思維,進行一步一步的解析,由于筆者是初學者,所以java也不是很好,在捉摸加上查閱了一下js中反射的機制之后,筆者總算是有所收獲了。

js中數據類型

說起js中的數據類型,恐怕那些經常接觸js或是專門學過js的人一點都不陌生。但是對于我這種沒有學過js的人來說,不去看,還真是不知道默寫類型。比如說function這個類型就很有意思,不是對象。而其他的類型就和java中的很相似了。

js中對象內的函數

前面給大家瞎逼逼了一統,但是什么都沒有講,真是抱歉。現在開始進入正文。直接上代碼吧。
var box = {
	"name":"陌兮",	"run":function(){		alert("我這函數是box里面的run的");	}}var box2 = box.run(); 首先說一下我對js中對象的理解吧。Js中的對象內部可以定義屬性,也可以定義函數。這和java比起來相當于什么?對!沒錯,就相當于類!js中是沒有類的,所以我理解的是js中的對象就相當于java中的類。既然js的對象相當于java中的類。那么java中的內部類,Js能用嗎?想到這一步,我馬上就開始嘗試:
var box = {	"run":function(){		alert("我這函數是box里面的run的");	},	"boxInner":{		"runInner":function(){			alert("我是box對象里面的run方法里面的boxInner對象里面的runInner方法!");		}	}}var box2 = box.run();var box3 = box.boxInner.runInner(); 可以看見,在box對象中我又定義了一個boxInner對象,并且在boxInner對象中還定義了一個runInner()的方法。強大的Js果真和預料中一樣,完全可以運行!思維不可遏止了!這時候,我就在想,既然內部類可以在Js中使用,那么我想要到function中定義對象(類)呢?那可不可以通過某種方法將function中的對象進行調用,從而讓代碼的復雜度更加高大上呢?于是我就寫下了如下的代碼:
var box = {	"run":function(){		alert("我這函數是box里面的run的");				var boxInner = {			"runInner":function(){				alert("我是box對象里面的run方法里面的boxInner對象里面的runInner方法!");			},		};	}}var box2 = box.run();var box3 = box.run().boxInner.runInner(); 可是結果很失望,運行box.run()是很正常的。但是運行到box.run().boxInner.runInner()的時候就報了null或undefined錯誤了。其實一看也就明白,這種直接調用的方法肯定不行,因為run()并沒有返回什么值,更不用說由此來獲得boxInner對象了。但是思維怎么可能就這樣被打斷!出現這種問題的原因,不就是無法獲得run()這個function的對象嗎?(知道function不是對象的我已經淚流滿面)于是乎,我第一反應就是按照java的思維使用反射獲得run()對象了,你無法給我返回run(),我拿起鏟子把你挖出來,哈哈!于是乎,百度查了一小會兒,得知了js反射原來如此簡單,代碼如下:
var box = {	"run":function(){		alert("我這函數是box里面的run的");				var boxInner = {			"runInner":function(){				alert("我是box對象里面的run方法里面的boxInner對象里面的runInner方法!");			},		};	}}var box2 = box.run();var box3 = box.run().boxInner.runInner();//若是要執行這段代碼,就必須要使得box.run()返回一個對象,//并且這個對象還是這個方法本身。在這里就必須使用反射機制來獲取當前對象的方法的對象了for(var p in box){	if(typeof(box[p]) == "function"){		//box[p]();			var out = box[p];		alert(typeof out);		for(var i in out){			alert("進入了函數");			out[i].runInner();		}	}} 然而結果又再次地打擊了我!將所得到的box[p]彈出來,我發現tm根本還是function呀!!!java中不是可以獲得對象嗎?坑!到了這地步,我終于發現了,js中對像和java中的類果真近乎一樣,就連在方法中定義的內部對象(java內部類)都近乎一樣。因為,安裝上面的寫法,我是可以在函數中定義對象的,但是該對象的作用域,或是說的直接點,該對象只能服務于該函數,不可跳出(外面根本就得不到該對象!)。

總結:

剛剛開始學習Js,對比與java,js給我的感覺就是java的另一種形式,或是說,都有面向對象的思維吧。對于以上淺薄的認知,還望各位大神能夠批評指正,在下感激不盡。如果有什么意見或是不懂之處,還望能夠和我交流探討,但愿我粗淺的知識能夠幫助到您,更愿大家一同進步,讓js在我們手中也能夠隨筆生花!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 油尖旺区| 玛多县| 鄂州市| 淅川县| 页游| 剑川县| 汤阴县| 彭泽县| 灵寿县| 横峰县| 上杭县| 宕昌县| 泰兴市| 阳高县| 惠州市| 聊城市| 明光市| 三都| 遵义市| 西和县| 吉水县| 鲁山县| 宣武区| 丽江市| 五家渠市| 石阡县| 北川| 胶南市| 塘沽区| 固阳县| 许昌市| 黎川县| 长春市| 宜君县| 巫山县| 巢湖市| 红河县| 丰原市| 辽阳市| 正阳县| 清新县|