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

浅谈面向对象

时间:2019-06-05 22:10:17      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:姓名   asc   枚举   区别   封装   团队协作   身份证   就是   tor   

其实面向对象,原型在JavaScript中是属于底层的知识点,但是在没有基础的情况下,甚至在学习的过程中,对于面向对象都是稀里糊涂的感觉,但是如果你学通了,你就发现它也不过如此,我学习面向对象这一章已经有一段时间了,所以在这里总结一下自己学到的
1,什么是面向对象:

在面向对象编程思想出来之前,我们更多用的是面向过程的编程思想。

  面向过程的编程思想和面向对象的编程思想有何区别。面向过程首先着重考虑的是程序逻辑,其次考虑的是数据。而面向对象首先着重考虑的是数据(类和对象),其次考虑的是逻辑(即业务逻辑)。

  单干与团队协作:面向过程程序的执行过程,更像是单干;面向对象程序的执行过程,更像是现实生活中的团队协作。所以,我们在描述面向过程程序的逻辑时,没有主语(语文的解释),如:先干啥,再干啥,然后干啥,最后干啥。而描述面向对象的逻辑时,有主语,如:谁先干啥,谁再干啥,然后谁干啥,最后谁干啥。

  面向对象思想的核心就是一切皆对象,完成任何功能,面对的最小单位都是对象,而不是基本数据类型(如:数字,布尔等等)。

  而对象就是复杂的数据,如:人没法用数字,布尔等基本类型描述,人是一个复杂的事物,由很多数据构成。一个人有身份证号码,姓名,性别,年龄,把这一切组合(封装)起来才是个人,人由若干个基本类型的数据组成。但这远远还不够,因为死人也具备这些属性(开个玩笑,为艺术献身一下),人能吃饭,能工作,此时,这个人才活灵活现了,所以,对象里面包括数据和函数;数据又叫属性,成员变量,函数又叫方法。在面向对象的世界里,习惯上会叫属性和方法,简单理解:对象=变量+函数。

  综上所述,面向对象是一种编程思想,而对象是复杂的数据类型,所以,面向对象就是面对的都是复杂的数据类型,而不是单一的整型,布尔等基本类型,对象是由若干个基本类型的数据构成,甚至对象里还有子对象,当然还有方法。而且万物皆可对象,除了数字,字符,布尔这种绝对值以外的所有部分都是对象,对象是类的实例化体现,类是对象的抽象体现。

2,面向对象的创建方式:

1、var obj=new Object();

2、var obj={};
3、var obj=Object.create();

3,对象的操作方法

delete:可以根据键值删除对象下的属性。
var obj={a:3,b:4}
delete obj.a

assign:可以复制对象

Object.assign() 方法用于将所有可枚举的属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。 注意(继承属性和不可枚举的属性是不能被拷贝的)
defineProperties :给对象定义属性值

Object.defineProperties(对象,{
“属性名”:{
value:属性值,
writable:布尔值
}
})

属性名必须是字符串,value后面的内容是属性的值,writable是该属性是否可写。
defineProperty():详细定义对象的属性
Object.defineProperty(obj, prop, descriptor)

var obj={};
Object.defineProperty(obj,“属性名”,{
enumerable: false, 是否可写可删除。默认为 true
configurable: false, 是否可被枚举。默认为 true。
writable: false, 是否可写。默认为 true。
value: 属性值 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。
})

freeze() : 冻结对象,使用该方法以后,不能修改该对象的所有属性,不能删除所有属性。
Object.freeze(obj)

getOwnPropertyDescriptor : 获取对象下属性的描述,也就是使用defineProperty定义的所有属性的描述内容
Object.getOwnPropertyDescriptor(obj, prop)
getOwnPropertyNames : 获取对象下所有属性的名称,并返回一个数组,该数组的内容就是这些属性名,该数组对元素是 obj 自身拥有的枚举或不可枚举属性名称字符串。 数组中枚举属性的顺序与通过 for...in 循环(或 Object.keys)迭代该对象属性时一致。 数组中不可枚举属性的顺序未定义。

var obj={a:1,b:2,c:3}
var arr=Object.getOwnPropertyNames(obj);
打印显示的是[a,b,c]

未完待续。。。。

浅谈面向对象

标签:姓名   asc   枚举   区别   封装   团队协作   身份证   就是   tor   

原文地址:https://www.cnblogs.com/wwmm1996/p/10981966.html

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