【JS-task1】 简述js面向对象

小课堂【上海】

分享人:王旭东

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

“面向对象编程”(Object-Oriented Programming,缩写为OOP)是目前主流的编程范式。它的核心思想是将真实世界中各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。 面向对象的语言有一个标志,就是类的概念,通过类可以创建任意多个具有相同属性和方法的对象。ECMAScript中没有类的概念,它的对象与基于类的语言中的对象有所不同。

2.知识剖析

1.对象

ECMA-262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数。严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。正因为这样(以及其他将要讨论的原因).我们可以把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。

1).数据属性 数据属性指包含一个数据值的位置,可在该位置读取或写入值,有4个供述其行为的特性: [[configurable]]:表示能否通过 delete 删除属性从而重新定义属性.能否修改属性的特性,或者能否把属性修改为访问器属性。默认为true; [[Enumerable]]:表示能否通过 for-in 循环返回属性。默认为true; [[Writable]]:表示能否修改属性的值。默认true; [[Value]]:包含该属性的数据值。读取/写入都是该值。默认为undefined;
2).访问器属性 访问器属性不包含数据值。它包含一对 getter 和 setter 函数(这两个函数都不是必需的)。读取访问器属性时,调用 getter 函数,返回有效的值;写入访问器属性时,调用 setter 函数并传入新值并设置。该属性有以下4个特征: [[Configurable]]:是否可通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性,默认值为true。 [[Enumerable]]:是否可通过for-in循环属性; [[Get]]:读取属性时调用,默认:undefined; [[Set]]:写入属性时调用,默认:undefined; 访问器属性不能直接定义,必须使用defineProperty()来定义.如:
2.3 创建对象 使用Object构造函数或对象字面量都可以创建对象,缺点是创建多个对象时,会产生大量的重复代码。因此使用用工厂模式的变体来解决问题。
使用自定义的构造函数来创建对象,它与工厂方法区别在于: 1.没有显式地创建对象 2.直接将属性和方法赋值给this对象; 3.没有return语句;
3).原型模式 JS每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,它是所有通过new操作符使用函数创建的实例的原型对象。原型对象最大特点是,所有对象实例共享它所包含的属性和方法,也就是说,所有在原型对象中创建的属性或方法都直接被所有对象实例共享。

4.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

参考一 51cto

参考二 博客

8.更多讨论

讨论

鸣谢

感谢大家观看

BY : 王旭东