zoukankan      html  css  js  c++  java
  • 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();

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

  • 相关阅读:
    Sort
    RAID
    LeetCode总结 -- 一维动态规划篇
    Count and Say
    Dynamic Programming Introduction
    Mongodb与Redis应用指标对比
    精通有状态vs无状态(Stateful vs Stateless)—Immutable模式之姐妹篇
    Windows 安装 pytorch3d
    GitHub 图片无法显示 或 gist 无法访问
    LaTeX符号表,数学公式速查必备
  • 原文地址:https://www.cnblogs.com/chengzhipcx/p/4497652.html
Copyright © 2011-2022 走看看