Javascript面向对象二

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();

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

上一篇:JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链


下一篇:python 面向对象二 类和实例