关闭

面向对象三大特征(封装,继承,多态)

时间: 2020-02-03阅读: 396标签: 面向对象

面向对象的三大特征:

1.封装: 把功能封装到对象中,外部只需要调用,无需关心内部实现
2.继承: 一个对象拥有另一个对象的所有的成员
3.多态: 同一个对象在不同情况下的多种状态


1.封装*
代码封装可以避免代码冗余,避免去哪聚变量污染,本质就是把公共的代码抽离出来在需要的地方随时调用在继承中也有体现


2.多态
同一个对象在不同的情况下的多种状态

         function Animal(name){
             this.name = name;
         };
         var dog = new Animal('金毛');
         dog.eat = function(food){
             console.log('汪汪汪,我是' + this.name + '我吃了' + food);
         };
         var cat = new Animal('汤姆');
         cat.eat = function(food){
            console.log('喵喵喵,我是' + this.name + '我吃了' + food);
         };
         function Person(name){
             this.name = name;
         };
         var p1 = new Person('小明');
         //饲养员的职责是给动物喂食
         p1.work = function(animal,food){
             //animal形参 接收由Animal构造函数实例化的动误对象,然后调用这个对象的eat方法
            animal.eat(food);
         };
         p1.work(dog,'大骨头');
         p1.work(cat,'小干鱼');


3.继承
继承的本质就是一个对象拥有另一个对象的所有的成员

 var wangjianlin = {
            house:{
                address:'北京一环',
                price:100000000000
            },
            car:{
                pinpai:'劳斯莱斯',
                price:5000000
            }
        };


        var wangsicong = {
            girlFrineds:['豆得儿','雪梨','林更新','王建钢']
        };

        //需求:让wangsicong对象拥有wangjianlin所有得成员
        console.log(wangjianlin);
        console.log(wangsicong);

        //第一种方式:混入式
        //解决方案: 遍历wangjianlin(父对象)所有得成员,添加到wangsicong(子对象)中
        //弊端:每继承一次,就要执行一次forin循环

        // for(var key in wangjianlin){
        //     wangsicong[key] = wangjianlin[key];
        // };

        // console.log(wangsicong);


        //第二种方式:替换原型
        //解决方案:将父对象(wangjianlin)作为子对象构造函数(SonWang)得原型对象
        //弊端:丢失之前得原型对象

        // function SonWang(grs){
        //     this.girlFrineds = grs;
        // };

        // SonWang.prototype.flowerMoney = function(){
        //     console.log('我是wangjianlin得儿子,我很会花钱哄女孩子吃六块钱得麻辣烫');
        // };

        // //原型赋值(覆盖之前得原型对象)
        // // SonWang.prototype = wangjianlin;

        // var wangsicong = new SonWang(['豆得儿','雪梨','林更新','王建钢']);
        // console.log(wangsicong);
        // var smallMao = new SonWang(['范冰冰','赵薇','李沁','谭松韵']);
        // console.log(smallMao);

        //第三种方式: 混合式(混入+替换原型)  使用最多
        //解决方案: 将父对象(wangjianlin)对象所有得成员,添加到子对象构造函数(SonWang)得原型中
        function SonWang(grs){
            this.girlFrineds = grs;
        };

        SonWang.prototype.flowerMoney = function(){
            console.log('我是wangjianlin得儿子,我很会花钱哄女孩子吃六块钱得麻辣烫');
        };

        //遍历wangjianlin对象所有得成员,添加到SonWang得原型中(没有覆盖原先的默认原型,只是动态添加属性)
       function extend(method,father){
            for(var key in father){
                method.prototype[key] = father[key];
            };
        };
         //混合式继承封装
        extend(SonWang,wangjianlin);

        var wangsicong = new SonWang(['豆得儿','雪梨','林更新','王建钢']);
        console.log(wangsicong);
        var smallMao = new SonWang(['苍老师','吉泽老师','波多老师','白石老师']);
        console.log(smallMao);
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/8117

关闭

面向对象设计的 10 条戒律

我们正在审查一些代码,并开始讨论为什么我们走捷径,不遵循常识原则。虽然每个人在对待关于类应该如何基于功能上下文来构建的问题上都有自己的智慧,但仍然有一些基本原则值得我们在设计类的时候牢牢记住

ES6 class与面向对象编程

在ES5中,我们经常使用方法或者对象去模拟类的使用,并基于原型实现继承,虽然可以实现功能,但是代码并不优雅,很多人还是倾向于用 class 来组织代码,很多类库、框架创造了自己的 API 来实现 class 的功能。

面向对象的反思

在面向对象的设计中,系统是由对象和让对象状态发生改变的方法,让对象到达另一种状态来达到目的的。当系统渐渐变大,对象渐渐变多,每个对象间的纠缠越来越多的时候一个对象的状态受到多个控制信号的机会就越来越多

面向对象设计与分析

面向对象方法是一种运用对象,类,继承,封装,聚合,关联,消息,多态等概念和原则来构造软件系统的开发思想(方法)。

JavaScript 中的面向对象编程

JavaScript 是一个强大的面向对象编程语言,但是,并不像传统的编程语言,它采用一个以原型为基础的OOP模型,致使它的语法让大多数开发人员看不懂。另外,JavaScript 也把函数作为首要的对象,这可能会给不够熟悉这门语言的开发人员造成更大的困惑

面向对象设计的6个设计原则

面向对象设计的6个设计原则:1.单一职责原则,2.里氏替换原则,3.依赖倒置原则,4.接口隔离原则,5.迪米特法则,6.开闭原则

浅析面向过程与面向对象

在面试时经常会被问到面向过程和面向对象有什么区别,虽然都是编程的一种思想,但是他们的侧重点不同,我们从以下几个方面进行简单总结。

JavaScript面向对象思想及继承(转载)

什么是面向对象编程思想,为什么要用面向对象思想。js中的面向对象思想和其他静态语言相比有什么不同。js中prototype,constructor,__proto__这些都是什么鬼?

ES6 类继承 和 super的使用

ES6中继承的子类中,如果使用构造函数constructor()那么就必须使用 super()方法初始化,这样下面才可以调用this关键字。super()只能用在子类的构造函数之中,用在其他地方就会报错。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!