标签:代码 对象 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