您所在的位置:小祥子 » 编程 » JavaScript » 正文

Javascript面向对象二

时间:2015-05-12 编辑:平常心cz 来源:本站整理

Javascript面向对象二

可以通过指定原型属性来对所有的对象指定属性,

Object.prototype.name="zhangsan";

????????Object.prototype.getType=function(){

????????????var a=typeof(this);

????????????alert(a);

????????}

????????var o=new Object();

????????var o2={};

????????var d=new Date();

????????o.getType();

????????o2.getType();

????????d.getType();

????????alert(o.name);

????????alert(o2.name);

????????alert(d.name);

????????

//继承

Javascript中没有extends 关键字

但是可以通过类的prototype实现继承

function Person(){

????????????

????????}

????????Person.prototype={

????????????name:"张三",

????????????show:function(){

????????????????alert(this.name);

????????????}

????????}

????????function Child(){

????????????

????????}

????????Child.prototype=Person.prototype;

????????var c=new Child();

????????c.show();

当改变Child的原型的show方法的时候,

Person对象的show也就改变了。

Child.prototype.show=function(){

????????????alert("这个方法已经改变了");

????????}

????????

????????var p=new Person();

????????p.show();//提示为这个方法已经改变

?

为了在改变Child的属性的时候 不改变Person的属性 我们可以通过 for in 和prototype属性来完成继承

function Person(){}

????????Person.prototype={

????????????name:"zhangsan",

????????????show:function(){

????????????????alert(this.name);????

????????????}

????????}

????????function Child(){}

????????

????????var c=new Child();

????????for(var p in Person.prototype){

????????????Child.prototype[p]=Person.prototype[p];

????????}

????????

????????Child.prototype.show=function(){

????????????alert("方法已经改变");

????????}

????????

????????var p1=new Person();

????????c.show();//方法已经改变

????????p1.show();//zhangsan

可以为每一个对象指定一个特有的方法来实现继承

Function.prototype.extend=function(source){

????????????for(var p in source.prototype){

????????????????this.prototype[p]=source.prototype[p];

????????????}

????????}

????????

????????function Person(){}

????????Person.prototype={

????????????name:"zhangsan",

????????????show:function(){

????????????????alert(this.name);????

????????????}

????????}

????????function Child(){}

????????Child.extend(Person);

????????var c=new Child();

//????????for(var p in Person.prototype){

//????????????Child.prototype[p]=Person.prototype[p];

//????????}

????????

????????Child.prototype.show=function(){

????????????alert("方法已经改变");

????????}

????????

????????var p1=new Person();

????????c.show();//方法已经改变

????????p1.show();//zhangsan

?

?

共有成员、私有成员和静态成员

Javascript并没有专门的机制来处理这些便量

想Java中我们通常定义类的时候会这么写

* public class Person{

???????? * ???? ????private String name;

???????? * ????????public void setName(String name){

???????? * ????????????this.name=name;

???????? * ????????}

???????? * ????????public String getName(){

???????? * ????????????return this.name;

???????? * ????????}

???????? * }

而Javascript中我们得这么写

function Person(){

????????????var name;//私有的成员

????????????this.setName=function(nm){

????????????????this.name=nm;

????????????}

????????????this.getName=function(){

????????????????return name;

????????????}

????????}

????????

我们可以这么使用了

Var p=new person();

p.setnema("zhangsan");

p.getname();

?

javascript中定义静态成员和方法

?

person.staticName="这是一个人";

person.staticMothod=function(){

????alert(person.staticNamse);

}

?

静态的属性和方法可以直接通过类名直接调用

Person.staticMothod();

?

?

注意:一个类的实例不能调用这个类的静态方法

?

?

关键词:面向对象 对象