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

 

 

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

 

posted @ 2015-05-12 16:14  平常心cz  阅读(217)  评论(1编辑  收藏  举报