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

封装,继承

时间:2018-06-10 15:22:37      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:代码   对象   value   特性   问题   script   细节   writable   改变   

#面向对象特征
###封装
1,封装概念

所谓封装,就是指隐藏内部的细节,不暴露在外部。

对于私有属性,有一个不成文的规定,习惯使用_来命名私有属性。

封装后的属性(私有属性),对于外部来讲,虽然不可见,但是对于内部来讲,是可见的。

2,get 和 set 以及属性特性

get访问器

set修改器

首先需要介绍一个方法,叫做Object.defineProperty(),通过这个方法来给对象添加属性。

语法如下:

    Object.defineProperty(obj,prop,descriptor)
    Obj:目标对象
    Prop:需要定义的属性的名字
    Decriptor:属性的相关特性

Decriptor参数接收的是一个JSON对象,里面可以设置的属性如下:

    Value:属性的值
    Writable:属性是否可写。
    Get:一旦目标属性被访问的时候,就会调用该方法
    Set:一旦目标属性被设置的时候,就会调用该方法
    Enumerable:查看属性是否可以枚举。说白了就是使用for...in的时候能否遍历出来
如果想要设置多个属性:只需要将defineProperty修改为defineProperties,这样就可以设置多个属性,使用该方法接收的参数也有一定的变化

语法如下:

    Object.defineProperties(obj,{JSON})
    JSON对象{prop:{descriptor},prop:{descriptor},....}
###this
this在普通函数中代表全局对象;在对象里代表当前对象

判断this的指向是根据用的什么方法调用this

改变this指向:

    1,通过.bind()方式
    2,call/apply可以用来调用函数,也可以改变this指向
        call是采用参数列表传参
        apply是采用数组形式传参
    3,箭头函数(里面的this指向是根据外部指向而改变)
###继承
1.继承基本介绍

在程序语言中,面向对象里面所指的继承是指一个子类去继承一个父类。子类继承了父类之后,父类所有的属性和方法都自动都拥有了。

    继承的好处
        继承最大的好处,就在于代码复用。
    继承的缺点
        首先如果继承设计得非常复杂,那么整个程序的设计也会变得庞大和复杂。并且如果是像C++那样的多继承语言,那么还可能会遇到菱形继承的问题。
单继承:所谓单继承,就是指只有一个父类

多继承:所谓多继承,就是指有多个父类

2.JS里面的继承

这里大致介绍3种JS中实现继承的方法

    (1)对象冒充
        所谓对象冒充,就是用父类(构造函数)去充当子类的属性
        但是,使用对象冒充来实现继承有一个缺陷,缺陷就是无法继承到原型对象上面的属性。
        从对象冒充衍生出一种通过call或者apply来实现继承
        Call和apply语法
        Function.call(obj,arg1,arg2,arg3.....)
        Obj代表当前对象
        arg1...arg3:代表参数列表
        Function.apply(obj,[arg1,arg2,arg3...])
        Obj代表当前对象
        后面的数组为一个参数列表
    (2)通过原型链来进行继承
        这种方法的核心思路就是改变构造函数的prototype属性值,但是虽然通过这种方式实现了原型对象上面属性的继承,但是又出现了新的问题:不能传参
    (3)混合方法实现继承
        为了能够同时传参和继承原型对象的属性,我们采用前面两种方式的混合方式来实现继承。

封装,继承

标签:代码   对象   value   特性   问题   script   细节   writable   改变   

原文地址:https://www.cnblogs.com/tydy9891-/p/9162904.html

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