1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > javascript 面向对象编程基础 多态_js面向对象

javascript 面向对象编程基础 多态_js面向对象

时间:2023-06-03 15:12:06

相关推荐

javascript 面向对象编程基础 多态_js面向对象

web前端|js教程

javascript,面向对象,多态

web前端-js教程

Javascript已经可以模拟出面向对象的封装和继承特性,但是不幸的是Javascript对多态特性的支持非常弱!其它面向对象语言的多态一般都由方法重载和虚方法来实现多态,Javascript也通过这两种途径来实现!

防串货 源码,vscode怎么有提示语,ubuntu 网线 识别,怎么找tomcat目录,无毛爬虫,数组转化成字符串 php,长乐区企业seo哪家好,mysql asp网站,bootstrap 简历模板lzw

重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和参数个数来区分不同的重载方法,因此方法重载是不被支持的!当先后定义了同名的方法的时候,后定义的方法会覆盖先定义的方法!

导购分享网站源码带数据,ubuntu系统壁纸软件,tomcat安装自签发证书,爬虫sign加密,php常用的输出语句有,莆田新站seolzw

既然解释器无法分辨重载方法,那就手动区分不同的方法:

免流量邀请源码,vscode j文,ubuntu高清,tomcat源码阅读,sqlite3内容破解,dz百度影音插件,最好的前端框架是那个,如何写python的爬虫,php 留言板源码,seo周报怎么写,188旅游网站管理系统6.5,移动网页导航代码大全,dedecms单本小说模板lzw

var MyClass=function(){

var AddNum=function(a,b){

return a+b;

}

var AddString=function(a,b){

return "I am here"+a+b;

}

this.Add=function(a,b){

if(typeof(a)=="number")

return AddNum(a,b);

else

return AddString(a,b);

}

}

var MyObj = new MyClass();

var X = MyObj.Add(5,6);

var Y = MyObj.Add("A","FFFFFF");

alert(X); //结果:11

alert(Y); //结果:I am hereAFFFFFF

虚方法:

function BaseClass(){

this.Hello=function(){

return this.Say();

}

}

function MyClassA(){

this.Say=function(){

return "Hello";

}

}

function MyClassB(){

this.Say=function(){

return "This is MyClassB";

}

}

MyClassA.prototype = new BaseClass();

MyClassB.prototype = new BaseClass();

var ObjA = new MyClassA();

var XX = ObjA.Hello();

alert(XX); //结果:Hello

var ObjB = new MyClassB();

var YY = ObjB.Hello();

alert(YY); //结果:This is MyClassB

由于Javascript解释执行的特性,因此可以再基类中调用将要在派生类中定义的方法,那么这个基类方法就相当于虚方法,可以实现模拟多态!

js的重载和重写(覆写):

重载的意思是,“同一个名字的函数(注意这里包括函数)或方法可以有多个实现,它们依靠参数的类型和(或)参数的个数来区分识别”。而重写(覆盖)的意思是,“子类中可以定义与父类中同名,并且参数类型和个数也相同的方法,这些方法的定义后,在子类的实例化对象中,父类中继承的这些同名方法将被隐藏”。重载的英文是overload,覆盖的英文是override。好了,概念介绍到这里,你猜到我要说什么了吗?嘿嘿,Code is cheap.看重载代码:

// 通过函数的arguments属性实现重载

function add() {

var sum = 0 ;

for ( var i = 0 ; i < arguments.length; i ++ ) {

sum += arguments[i];

}

return sum;

}

function test() {

alert(add());

alert(add( 1 , 2 ));

alert(add( 1 , 2 , 3 ));

}

通过代码运行结果,这样就实现了任意多个参数加法函数的重载了。当然,你还可以在函数中通过 instanceof 或者 constructor 来判断每个参数的类型,来决定后面执行什么操作,实现更为复杂的函数或方法重载。总之,javascript 的重载,是在函数中由用户自己通过操作 arguments 这个属性来实现的。关于arguments的特性,前面我已经做了简单介绍,参考拙文:/zhanglingdll_39/archive//08/20/4465670.aspx 。

下面重点理解js重写的实现:

// 为类添加静态方法inherit表示继承于某类

Function.prototype.inherit = function (baseClass) {

for ( var p in baseClass.prototype) {

this .prototype[p] = baseClass.prototype[p];

}

}

// js实现重写

function parentClass() { // 父类

}

parentClass.prototype.method = function () {

alert( ” parentClass method ” );

}

function subClass() { // 子类

}

//

下面这一句和subClass.prototype = new parentClass();等价

subClass.inherit(parentClass);

// subClass.prototype.method = function() { // 子类重写了父类的方法 -- 去掉注释运行试试看

// alert("subClass method");

// }

function test() {

var obj = new subClass();

obj.method();

}

这样,子类中定义的method 就覆盖了从父类中继承来的method 方法了。这是你可能会问,如何在子类中调用父类的method方法呢?好的,看实现如下:

// 为类添加静态方法inherit表示继承于某类

Function.prototype.inherit = function (baseClass) {

for ( var p in baseClass.prototype) {

this .prototype[p] = baseClass.prototype[p];

}

}

/* 参考文章:/blog/127847 */

// js实现重写

function parentClass() {

this .method = function () {

alert( " parentClass method " );

}

}

function subClass() {

var method = this .method;

this .method = function () {

method.call( this );

alert( " subClass method " );

}

}

subClass.prototype = new parentClass();

// subClass.inherit(parentClass); //这一句貌似和上一句subClass.prototype = new parentClass();等价,其实呢????(注释上一行,运行这一行看看)

subClass.prototype.constructor = subClass;

function test() {

var obj = new subClass();

obj.method();

}

好了,关于多态的介绍就到这里。js面向对象编程犹如浩瀚海洋广阔无边,我这三篇参考别人的文章写出来的js面向对象基础只能当作入门者学习的参考。学无止境,参考了网上几篇老大们的牛文,深知自身技术的浅薄,对于已经超越了解阶段的读者,还是看看园子里高人的技术文章吧。我这里要先拜谢园子里的高人了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。