美文网首页前端(Front-end)
JavaScript之面向对象

JavaScript之面向对象

作者: 萨默塞特酱 | 来源:发表于2016-10-15 17:16 被阅读6次

    d>“面向对象编程”(Object Oriented Programming,缩写为OOP)是目前主流的编程范式。面向对象最重要的三大特征是封装、继承和多态。


    一 封装

    一个对象提供一些公有的方法和属性供外部使用(接口),一些私有的属性和方法供对象本身调用。封装是模块化的基石,还避免了命名冲突的问题。

    封装1
    上面例子中function A的是从外面可以任意访问的,没有做好封装。
    封装形式
    var _config是个局部变量,然后给A增加了一个getConfig方法。既保证了外部可以访问到_config属性,又可以保证_config不会被外部任意改写。因为一般来说,每一个子类的属性都是私有的。
    下面定义在prototype上的方法可以被外部访问,原型对象上的所有属性和方法,都能被派生对象共享。但原型对象的属性不是实例对象自身的属性。只要修改原型对象,变动就立刻会体现在所有实例对象上。

    二 继承

    1. 类继承:JS中其实是没有类的概念的,所谓的类也是模拟出来的。类式继承是在函数对象内调用父类的构造函数,使得自身获得父类的方法和属性。call和apply方法为类式继承提供了支持。通过改变this的作用环境,使得子类本身具有父类的各种属性。
    var father = function() {
     this.age = 52;
      this.say = function() {
     alert('hello i am '+ this.name ' and i am '+this.age + 'years old');
       }
     }
     var child = function() {
      this.name = 'bill';
      father.call(this);//使用call继承father的属性和方法
     }
     var man = new child();
     man.say();
    
    1. 原型继承是JavaScript中固有的


      原型继承
    2. 组合模式:用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为一般来说,每一个子类的属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到的一种方法。
    function father() {
     this.a = 'father'  
     }
     father.prototype.b = function() {
     alert(this.a)
    }
     var child = function() {
      father.call(this)
     }
     child.prototype = new father();
    

    相关文章

      网友评论

        本文标题:JavaScript之面向对象

        本文链接:https://www.haomeiwen.com/subject/zyxoyttx.html