资讯专栏INFORMATION COLUMN

JavaScript面向对象的三大特征

chaosx110 / 2825人阅读

摘要:什么是面向对象本文不在论述。接下来说一下面向对象的三大特征在当中的实现。封装实现封装实现就是是对象内部的变化对外界是透明的不可见。这种做法使对象之间低耦合便于维护升级团队协作开发。。

概述

本来打算写设计模式的,在谈论js的设计模式之前先说一下js的面向对象,因为很多设计模式的实现都掺杂着面向对象的思想,所以先做一下前期铺垫。

js我们都知道是一种动态类型脚本型语言,变量类型无法保证,所以我们可以尝试调用任意对象的任意方法,不用考虑它原本是否被设计为拥有该方法。

什么是面向对象本文不在论述。接下来说一下面向对象的三大特征在js当中的实现。

封装
这个特性在设计一个框架时需要认真考虑的。封装的目的是将信息隐藏,其主要可分为以下几类

数据封装

在一些静态类型的语言如java中,本身语法就提供了这些功能。js当中只能依靠变量的作用域来实现封装的特性,并且只能模拟出public和private两种特性。

/**
 -  利用函数创建的作用域达到数据封装的目的。
 - @type {{getName, setName}}
  */

  var obj=(function () {
var _name="gcy";
return {
    getName:function () {
        return _name;
    },
    setName:function (val) {
        _name=val;
    }

};
 })();
 obj._name;  //undefined
 obj.getName(); //gcy

封装实现

封装实现就是是对象内部的变化对外界是透明的,不可见。这种做法使对象之间低耦合,便于维护升级,团队协作开发。
$(selector).each(function(index,element))。就比如这个each函数,我们不用关心内部实现,只要提供的功能正确就行。我们关注的只是接口调用形式。

继承

继承在静态语言中,例如java有关键字,虽然在es6中也有extend以及class,但其本质仍实现仍是基于原型机制。

/**
 * 简单的es5原型继承
 * @constructor
 */
var A=function () {
}
A.prototype={name:"gcy"};

var B=function () {
};
B.prototype=new A();

var b=new B();
console.log(b.name);
/**
 * e6继承实现demo
 */
class People{
    constructor(name){
        this.name=name;
    }
    getName(){
        return this.name;
    }
}

class Black extends People{
    constructor(name){
        super(name);
    }
    speak(){
        return " i am black";
    }
}
var peo=new Black("gcy");

console.log(peo.getName()+" says "+peo.speak());

其实原型继承方式写法很多。我认为还是理解原型链机制比较重要,关键就是理解prototype和__proto__.

多态

多态其实就是把做的内容和谁去做分开。在java中我们可以通过向上转型,也就是面向接口编程。因为js是动态语言,多态性本身就有。
下面这个例子就说明了,一个动物能否实现叫声,只取决于makeSound,不针对某种类型的对象。

 /**
     * 多态的实现案例
     * @param animal
     */
    var makeSound=function (animal) {
        animal.sound();
    }
    var Duck=function () {
    }
    var Dog=function () {
    }
    Duck.prototype.sound=function () {
        console.log("嘎嘎嘎")
    }
    Dog.prototype.sound=function () {
        console.log("旺旺旺")
    }
    makeSound(new Duck());
    makeSound(new Dog());

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81489.html

相关文章

  • Java面向对象及其三大特征

    摘要:面向对象编程思想面向对象,简单来说就是由动作的执行者变为动作的操控者。面向对象是相对于面向过程的。面向对象三大特征面向对象有三大特征,即封装继承和多态。接口和抽象类接口接口名方法方法,默认修饰符为,不能用其他修饰符修饰接口。 面向对象编程思想 面向对象,简单来说就是由动作的执行者变为动作的操控者。结合具体例子来说就是使用某个人或者工具所具有的功能而不用去管功能的具体实现方式。例如现实中...

    William_Sang 评论0 收藏0
  • java面向对象三大特征

    摘要:面向对象的三大特征封装继承多态。以本文为例,类中的变量为私有变量,只能通过创建对象此时构造方法自动调用来赋值。 java面向对象的三大特征:封装、继承、多态。 以本文为例,User类中的变量为私有变量,只能通过创建对象(此时构造方法自动调用)来赋值。外界只能通过公有方法api()来访问User类。 Admin类继承了User类,调用了其构造方法,还重写了method_1方法,增加了...

    susheng 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0

发表评论

0条评论

chaosx110

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<