码迷,mamicode.com
首页 > 其他好文 > 详细

编程思想

时间:2015-09-13 15:58:10      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

##编程思想(面向过程和面向对象,这2个并不是绝对对立,冲突的。相辅相成)
    
###面向过程
- 最接近计算机的方法,为了计算机能执行程序,强制的使我们的思维变成计算机的思维。
- 当程序很父子时,就很困难也容易出现问题。
- 0101
- 汇编语言
- 之后是更高级的语言:C语言等(有循环、判定。。。)
- 最直观的


###面向对象
- object(对象、物件、物体):真是存在的物体。是类的实例。
    - 特征、属性:
    - 作业、行为、方法: 
- 类:指具有相同属性和方法的一组对象的抽象。是对象的抽象。
- 人类的思想方式,适合复杂的程序的开发。
- 以人多思维方法想问题再变成计算机能运行的方法。
- 是增量式开发:先找对象,再分析每个对象的属性和行为。每个对象还能细分,一开始某个对象没想清楚,可以之后再来接着想,并不会影响别的对象的开发
- java、  ,是纯面向对象的方法
- js,不是纯面向对象的方法,不像纯面向对象的语言那么完全

####JS中面向对象
- js动态类,java...里面是静态类(一开始就要确定属性和方法,而且原型不能改)
- js中没有类的概念,但是有原型的概念。
- js中的原型和类有点类似。在js很多相同的属性和方法的对象都拥有同一个原型,原型本事也是一个对象。
- 一开始没有属性和方法,之后再添加属性和方法。而且原型能改。
- 原型和类有本质上的区别,但是又有点类似。
- 从代码看:
    > <script>
        //大写首字母,定义对象
        //创建一个叫people的构造函数
        function People(name,age){//外面传几个值进来,分别把这个值给name,age...
            this.name = name;
            this.age = age;
            this.run = function(){  
                alert(this.name+"跑跑跑");
            }
        }
        people.prototype.qq = "12345";//面向原型来添加一个属性/方法,就这原型里面的对象都添加上了这个属性/方法。
        var p1 = new People(“小胖”,18);//p1装的是一个内存地址,指向的people。
        var p2 = new people(“小瘦”,19);
        p1.age = 25;//单独修改P2的属性。
        p1.sex = "男";//动态的单独给p1添加属性。
        alert(p1.name+" "+p1.age+" "+p1.name+" "+p1.age);
        p1.run();//因为P1是方法。所以用()来调用。
        p2.run();
    > </script>

####构造函数
- 创造对象;
- 首字母大写;
- 里面用this来;
- 通过new来调用构造函数;

####继承
- 在相同属性和方法的对象集中在一个类中,再把相同的属性、方法再归到一个副类中,让子辈能用。
- 子辈继承父辈的属性,还能发展新的属性
- 在js中继承就要麻烦一些,js没有类。只有原型(是动态的)。
- 在js中能通过模拟来继承。怎么做假的继承(效果一样,但不是从父类继承下来的)————对象冒充法: 
>第一个假的继承的方法。
><script>
    //大写首字母,定义对象
    //创建一个叫people的构造函数
    function People(name,age){//外面传几个值进来,分别把这个值给name,age...
        this.name = name;
        this.age = age;
        this.run = function(){  
            alert(this.name+"跑跑跑");
        }
    }
        
    function Man(){//假的继承,因为man并不是people的,能有效果
        this.fifht = "pk";
        //对象冒充法
        this.inherit = People;
        this.inherit(name,age);//执行
        delete this.inherit;//删除

    }
    var m1 = new Man("小胖",18);
    console.log(m1);
        m1.run();
    console.log(m1 instanceof Man);//检查对象,m1是不是Man的类型。
    console.log(m1 instanceof People);//检查对象,m1是不是People的类型。如果man是People的类型,那m1也算是People的类型。
        m1.run();
> </script>

第二、三个假的继承的方法(call和apply,是专门执行方法的,这2个的区别就是参数,一个是参数用逗号隔开,一个是数组)。
><script>
    //大写首字母,定义对象
    //创建一个叫people的构造函数
    function People(name,age){//外面传几个值进来,分别把这个值给name,age...
        this.name = name;
        this.age = age;
        this.run = function(){  
            alert(this.name+"跑跑跑");
        }
    }
        
    function Man(){//假的继承,因为man并不是people的,能有效果
        //冒充法二
        people.call(this,name,age);//this代表man.
        //冒充法三
        people.apply(this,[name,age]);//this代表man.
    }
    var m1 = new Man("小胖",18);
    console.log(m1);
    console.log(m1 instanceof People);
        m1.run();
> </script>

- 真的继承方法:原型链(prototype),把子类的原型指给父类对象。
><script>
    //大写首字母,定义对象
    //创建一个叫people的构造函数
    function People(name,age){//外面传几个值进来,分别把这个值给name,age...
        this.name = name;
        this.age = age;
        this.run = function(){  
            alert(this.name+"跑跑跑");
        }
    }
        
    function Man(name,age){
        this.fight = "pk";    
        this.constructor(name,age);//为了子类能使用父类的参数,通过这个来调用父类的构造函数传参
        constructor来把name和age传进去。
    }
    Man.prototype = new People();//实现真实继承的方法
        
    var m1 = new Man("小胖",18);
    console.log(m1);
    console.log(m1 instanceof People);
        m1.run();
    console.log(m1.__proto__.__proto__.__proto__);//通过m1.___(2个下划线)proto__来查看父级。
> </script>

- 通过constructor(构造)来调用父类的构造函数传参
> <script>
    function Dongwu(name,age){
        this.name = name;
        this.age = age;
        this.run = function(){
            alert(this.name +"跑跑跑");
        }
    }
    function Dog(name,age,food){
        this.food = food;
        this.constructor(name,age);
    }
    Dog.prototype = new Dongwu();

    function Mao(name,age,fish){
        this.fish = fish;
        this.constructor(name,age);
    }
    Mao.prototype = new Dongwu();

    var m1 = new Dog("狗",18,"骨头");
    var m2 = new Mao("猫",20,"鱼");

    alert(m1.name+" "+" "+m1.age+" "+m1.food);
    alert(m2.name+" "+" "+m2.age+" "+m2.fish);

    m1.run();
    m2.run();

</script>


编程思想

标签:

原文地址:http://www.cnblogs.com/Rt-long/p/4804957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!