面向对象是把实现问题的方法看成对象,是实际存在的一个事物。类是对象的抽象,对象是类的实例。JS中没有类的概念,JS中称为原型,也是对象,相比类,原型可以动态操作该对象的属性和方法.
通过构造函数<用来产生对象>,创建对象.

    <script>
        //定义一个对象
        function People(name,age){
        //属性
        this.name = name;
        this.age = age;
        //一个方法
        this.run = function(){
            alert(this.name + "paopaoapo");
        }
    }
    
        People.prototype.qq="12345";//给People原型添加属性qq
        var p1=new People("小明",18);//存储的内存地址
        p1.age=25;
        var p2=new People("小明2",19);//p1、p2是两个不同对象 来自同一个原型
        p1.sex="男";
        alert(p1.name + " " + p1.age +" " + p1.sex+" "+p1.qq+"   " +p2.name + " " 
        + p2.age+" " + p2.sex+" "+p2.qq);
        p1.run();
        p2.run();

    </script>
JS是没有类的,所以继承的实现我们可以用一下方法实现:
    
    function Man(name,age){
        this.fight="PK";
        //调用父类的构造函数传参《不需要传参数就可以不用》
        this.constructor(name,age);
        //对象冒充法一
        //        this.inherit = People;//模拟继承 调用People函数
        //        this.inherit(name,age);//执行People
        //        delete this.inherit;//删除inherit属性
        //对象冒充法二
        //        People.call(this,name,age);//this表示Man对象
        //对象冒充法三
        //          People.apply(this,[name,age]);//this表示Man对象,和call不一样的是传参数方式
        //
    }
    Man.prototype = new People();//Man的prototype<原型>为People 真实继承 原型链

    var m1=new Man("大胖",56);
    //    m1.run();
    console.log(m1);
    //    console.log(m1 instanceof Man);//对象冒充法一二三 真实继承为true

    console.log(m1.constructor);
    //    打出function People(name,age){
    //        //属性
    //        this.name = name;
    //        this.age = age;
    //        //一个方法
    //        this.run = function(){
    //            alert(this.name + "paopaoapo");
    //        }
    //    }
    console.log(m1 instanceof People); //对象冒充法一二三为false 真实继承为true
    //    console.log(m1.__proto__.__proto__.__proto__.__proto__);//__proto__和prototype一样的

posted on 2015-09-13 21:05  ytt12  阅读(151)  评论(0)    收藏  举报