首页 > 网站 > 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在我们手中也能够随笔生花!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表