关于javascript的一个问题,js有面向对象性吗
javascript里2个function,方法名完全相同,前一个是alert("1"),后一个是alert("2").现在有一botton调用这个方法,问是弹出哪个方法...
javascript里2个function,方法名完全相同,前一个是alert("1"),后一个是alert("2").
现在有一botton调用这个方法,问是弹出哪个方法呢????
我现在知道是弹出第2个,而不是第一个,也不是2个都弹出,我想知道为什么,有人知道吗?? 展开
现在有一botton调用这个方法,问是弹出哪个方法呢????
我现在知道是弹出第2个,而不是第一个,也不是2个都弹出,我想知道为什么,有人知道吗?? 展开
7个回答
展开全部
两个方法名完全相同,可以通过参数的不同(类型不同或个数不同)识别调用两方法,这在OOPL中是面向对象的一个特性叫重载.但JS不是一门真正的OOPL,故对这种重载技术并不支持.
在JS中不并很来格地调用同名函数,所以一般情况下后一个定义会重定义前一个定义,所以会显示出后一个.而一楼说什么也显示不出来,是因为他知道JS根本就不支持函数重载的.如果在OOPL中支持函数重载时,如果出现同名函数,若参数相同时,编译系统会检查出错误而拒绝编译.但在JS只是一个实时的翻译,而不是编译的情况下,它运行后一个函数时只是对前一个的重定义,而运行或是翻译之前并不去记录或是检查该同名方法存在,且出了问题的.所以对于翻的语言来说,相当于只在编译系统的运行态,而没有其他的状态的.
试问,这种翻译的方式,怎么可能让其支持OOPL中的重载等多重技术呢?所以JS只是一种相类似的面向对象的引用,而非是一门OOPL的.虽然那么多误人子弟的教科书上讲了,便总改变不了JS的真实本质的.
对于JS是否是一门OOPL,存在着很大的争议的.因为它可以像对象一样引用,可以建立一个新的对象等方式,提示着它似乎是一门OOPL,因为这种人是实用家,能这样使用就可以推断其是一门OOPL.而一些激进的学者却认为它只是一种引用方式的改变,事实上由于语言的先天性存在缺陷而不可成为真正的OOPL了,就算你模仿的有十二分像刘欢唱歌,但你还不是真正的刘欢.
中立学者也不原承认JS是一门OOPL的,他们的理由是,重载,封装(这里指的封装是保证数据不外露方面),继承等这些重要的特性J不S不都不能实现.而只是拘限于引用方法像是OOP,所以不可能实现真正的OOPL技术的.
之所以认为其是一门JS,是因为受到了JS的引用方式的影响的.OO技术包含的方面有很多,OOA,OOD还未涉及到OOPL呢,只有OOP才涉及到OOPL,所以多数人认为OOP与OOPL相混而导致的.OOP是面向对象编程,指的是一种编程的风格,而与语言无关的.就算你在OPPL(面向过程编程语言)中也可以实现以OOP的风格编程而已.如果纯粹考虑JS是否是OOPL我想多数评价的标准还是语言与OO理论的吻合的.中立学者只好称其是支持OO技术,称其语言与OO技术的支持,同时说JS对于OO技术是支持的,只不过支持不好吧了.
激进学者还是不同意,因为中产偷换了一个概念,一门语言是否是OOPL,而不是一门语言是否支持OO技术.如果真是这样,那么是否要创造出一个支持度的概念,从而从量化上讲一门语言是否是OOPL呢?且不能说一门语言只有有一点的支持OO技术就一定是OOPL吧.
而真正的OOPL是基本上完全吻合OO理论的.差别只是一些OO技术的术语不同还有一些细节的不完备.比如对于多重继承的不同处理或是是否支持多重继承的等一些不影响大体OO理论的变化.但如果你非要让一个不支持继承不支持重载,不支持封装等的语言称其为OOPL虽不犯法,但总的有点别扭的.
刚发现,一些习惯我还没有改掉,对一下字母吧:
OO:面向对象,这是一套完全整的理论,是一完全整的方法学.也是一个系统的方法过程的.
OOA:面向对象分析
OOD:面向对象设计
OOP:分析过了,设计过了,当然要成品了,这个才是真正产生成品的过程,面向对象编程.
OOPL:编程免不了语言的,这个是所使用的一个工具,面向对象编程语言.
理解了你就应该知道,OOPL只是一个工具被选用了,你完全可以OOP时选用一门OPPL的.但OOA与OOD的过程可能还有,风格上可以用OOP的风格,这种情况下显然是不能说OPPL是OOPL的.这就是JS不是一门真正的OOPL的原因的!
在JS中不并很来格地调用同名函数,所以一般情况下后一个定义会重定义前一个定义,所以会显示出后一个.而一楼说什么也显示不出来,是因为他知道JS根本就不支持函数重载的.如果在OOPL中支持函数重载时,如果出现同名函数,若参数相同时,编译系统会检查出错误而拒绝编译.但在JS只是一个实时的翻译,而不是编译的情况下,它运行后一个函数时只是对前一个的重定义,而运行或是翻译之前并不去记录或是检查该同名方法存在,且出了问题的.所以对于翻的语言来说,相当于只在编译系统的运行态,而没有其他的状态的.
试问,这种翻译的方式,怎么可能让其支持OOPL中的重载等多重技术呢?所以JS只是一种相类似的面向对象的引用,而非是一门OOPL的.虽然那么多误人子弟的教科书上讲了,便总改变不了JS的真实本质的.
对于JS是否是一门OOPL,存在着很大的争议的.因为它可以像对象一样引用,可以建立一个新的对象等方式,提示着它似乎是一门OOPL,因为这种人是实用家,能这样使用就可以推断其是一门OOPL.而一些激进的学者却认为它只是一种引用方式的改变,事实上由于语言的先天性存在缺陷而不可成为真正的OOPL了,就算你模仿的有十二分像刘欢唱歌,但你还不是真正的刘欢.
中立学者也不原承认JS是一门OOPL的,他们的理由是,重载,封装(这里指的封装是保证数据不外露方面),继承等这些重要的特性J不S不都不能实现.而只是拘限于引用方法像是OOP,所以不可能实现真正的OOPL技术的.
之所以认为其是一门JS,是因为受到了JS的引用方式的影响的.OO技术包含的方面有很多,OOA,OOD还未涉及到OOPL呢,只有OOP才涉及到OOPL,所以多数人认为OOP与OOPL相混而导致的.OOP是面向对象编程,指的是一种编程的风格,而与语言无关的.就算你在OPPL(面向过程编程语言)中也可以实现以OOP的风格编程而已.如果纯粹考虑JS是否是OOPL我想多数评价的标准还是语言与OO理论的吻合的.中立学者只好称其是支持OO技术,称其语言与OO技术的支持,同时说JS对于OO技术是支持的,只不过支持不好吧了.
激进学者还是不同意,因为中产偷换了一个概念,一门语言是否是OOPL,而不是一门语言是否支持OO技术.如果真是这样,那么是否要创造出一个支持度的概念,从而从量化上讲一门语言是否是OOPL呢?且不能说一门语言只有有一点的支持OO技术就一定是OOPL吧.
而真正的OOPL是基本上完全吻合OO理论的.差别只是一些OO技术的术语不同还有一些细节的不完备.比如对于多重继承的不同处理或是是否支持多重继承的等一些不影响大体OO理论的变化.但如果你非要让一个不支持继承不支持重载,不支持封装等的语言称其为OOPL虽不犯法,但总的有点别扭的.
刚发现,一些习惯我还没有改掉,对一下字母吧:
OO:面向对象,这是一套完全整的理论,是一完全整的方法学.也是一个系统的方法过程的.
OOA:面向对象分析
OOD:面向对象设计
OOP:分析过了,设计过了,当然要成品了,这个才是真正产生成品的过程,面向对象编程.
OOPL:编程免不了语言的,这个是所使用的一个工具,面向对象编程语言.
理解了你就应该知道,OOPL只是一个工具被选用了,你完全可以OOP时选用一门OPPL的.但OOA与OOD的过程可能还有,风格上可以用OOP的风格,这种情况下显然是不能说OPPL是OOPL的.这就是JS不是一门真正的OOPL的原因的!
展开全部
因为js是弱类型语言.不像c++,C#这类型语言!他不支持函数方法重载.你之前写一个方法.后面再写一个相同名字的方法他默认会把上一个方法覆盖掉!这种情况和PHP中相同!
他不像是C#等语言支持函数重载.根据不同的参数.返回值调用不同的方法!
关于JS是不是面向对象.他不完全是面向对象,他也可以写成类,方法,属性.但是和其它的语言稍有不同!比如
var cls={
my:{a:0},
init:function()
{
alert(this.my.a);
}
};
window.onload=function()
{
cls.init();
}
调用cls.init();
这就是他的类,但是缺少了好多面向对象的一些特性.楼上说的很清楚!所以说他不是完全面向对象
面向对象只是一种思路一种解决问题的思路!
他不像是C#等语言支持函数重载.根据不同的参数.返回值调用不同的方法!
关于JS是不是面向对象.他不完全是面向对象,他也可以写成类,方法,属性.但是和其它的语言稍有不同!比如
var cls={
my:{a:0},
init:function()
{
alert(this.my.a);
}
};
window.onload=function()
{
cls.init();
}
调用cls.init();
这就是他的类,但是缺少了好多面向对象的一些特性.楼上说的很清楚!所以说他不是完全面向对象
面向对象只是一种思路一种解决问题的思路!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
js是面向过程语言,但是他有面向对象特性,就像C一样。
如window对象、函数实体对象、Object、String,当然他也能构造自己的prototype,这就是面向对象的东西,简单举例一个面向对象的应用,引用ADODB做数据库连接:
var conn = new ActiveXObject("ADODB.Connection"); //引用系统ActiveXObject对象
var rs = new ActiveXObject("ADODB.Recordset");
conn.Open("driver={SQL Server};server=192.168.1.5;uid=sa;pwd=111;DataBase=smartSchedule");
var sql="select * from 数据表";
rs.open(sql, conn);
alert("最终结果是:" + rs("完成时间"));
rs.close();
rs = null;
conn.close();
conn = null;
这种编程方法就是面向对象编程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-06-05 · 知道合伙人互联网行家
关注
展开全部
需求分析:使用javascript时,难免会用到复杂的数据结构,当通过定义对象和方法无法解决问题时,就要考虑使用面向对象的方法
困难:js不支持类的定义,也就是说无法通过定义一个类来封装我们想要的属性和方法,可以直接定义一个对象而无需构造函数.
变通:对象中可以任意存放属性和方法,那么就可以使用对象来模拟出类.
困难:js不支持类的定义,也就是说无法通过定义一个类来封装我们想要的属性和方法,可以直接定义一个对象而无需构造函数.
变通:对象中可以任意存放属性和方法,那么就可以使用对象来模拟出类.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Javascript 不是面向对象的,但它是基于对象的。基于对象因为几乎每个Javascript内部类型都有自己的方法,不是面向对象是因为Javascript的设计者并没有考虑到类的应用,从没有class关键字就可以看出。不过这增加了它的灵活性,比如:function 既是一种变量类型(当然也被当做类来对待),优势类的定义符号,还是函数的定义符号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询