标签:end 返回 共享 问题 开始 存在 拨号 方法调用 and
好程序员前端学习路线分享模拟JavaScript中面向对象技术,在C#和Java语言中,面向对象是以类的方式实现的,特别是继承这个特性,类的方式继承表现出了强大的功能,而且也易于学习。JavaScript不是纯的面向对象的语言,而是基于对象的语言,对象的继承是以原型函数的形式继承的,很多初学者刚开始接触的时候不太理解,但是JavaScript这种以原型函数的形式实现面向对象技术,不仅是可行的,而且还为面向对象技术提供了动态继承的功能,本文主要讨论了JavaScript的面向对象技术。? function?Mobile(kind,brand)?{?
????this.kind=kind;//定义手机的种类,例如GSM/CDMA?
????this.brand=brand;//定义手机的品牌,this关键字表示用该构造函数实例化之后的对象?
}?
?
///?
?定义类的第二步是在构造函数的原型对象中定义它的实例方法或其他属性?
?该对象定义的任何属性都将这个类的所有实例继承。?
??
?/?
?//拨号,这里只是返回电话号码?
Mobile.prototype.dial?=?function(phoneNo)?{?
????return?phoneNo;?
};?
?
?
///?
?定义类的第三步是定义类方法,常量和其他必要的类属性,作为构造函数自身的属性,而不是构造函数?
?原型对象的属性,注意,类方法没有使用关键字this,因为他们只对他们的实际参数进行操作。?
?/?
//开机关机方法?
Mobile.turnOn=function()?{?
???return?"The?power?of?mobile?is?on";?
}?
Mobile.turnOff=function()?{?
???return?"The?power?of?mobile?is?off";?
}?
//类属性,这样他们就可以被用作常量,注意实际上他们并不是只读的?
Mobile.screenColor=64K;//假设该类手机的屏幕颜色都是64K彩屏的?
三、子类化?
???JavaScript支持子类化,只需把子类的原型对象用超类实例化即可,但是应该注意,这样子类化之后就会存在一个问题,由于是用超类实例化子类的原型对象取得的,所以就冲掉了自己本身的由JavaScript提供的constructor属性,为了确保constructor的正确性,需要重新指定一下,子类化的程序例子如下:?
???/??子类化??/?
//下面是子类构造函数智能型手机?
function?SmartPhone(os)?
{?
??this.os=os;?
}?
//我们将Mobile对象作为它的原型?
//这意味着新类的实例将继承SmartPhone.prototype,?
//后者由Mobile.prototype继承而来?
//Mobile.prototype又由Object.prototype继承而来?
SmartPhone.prototype=new?Mobile(GSM,Nokia);?
//下面给子类添加一个新方法,发送电子邮件,这里只是返回Email地址?
SmartPhone.prototype.sendEmail=function(emailAddress)?{?
??return?this.emailAddress?
}?
//上面的子类化方法有一点缺陷,由于我们明确把SmartPhone.prototype设成了我们所创建的一个对象,所以就覆盖了JS提供?
//的原型对象,而且丢弃了给定的Constructor属性。该属性引用的是创建这个对象的构造函数。但是SmartPhone对象集成了它的?
//父类的constructor,它自己没有这个属性,明确设置着一个属性可以解决这个问题:?
SmartPhone.prototype.constructor=SmartPhone;?
var?objSmartPhone=new?SmartPhone();//实例化子类
好程序员前端学习路线分享模拟JavaScript中面向对象技术
标签:end 返回 共享 问题 开始 存在 拨号 方法调用 and
原文地址:https://blog.51cto.com/14479068/2433691