欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于面向对象的简单总结

程序员文章站 2022-05-03 10:34:09
、什么是对象:万事万物皆对象一切具有相同本质特征和行为的物质 或一切具有属性和方法的事物,都称作对象。对象具有两个特性:属性和方法 对象类型 存储在堆中。 例如:var obj = { name : "jack"}var obj2 = obj ; 将obj的地址传递给obj2obj2.name = ......

、什么是对象:万事万物皆对象
一切具有相同本质特征和行为的物质 或一切具有属性和方法的事物,都称作对象。
对象具有两个特性:属性和方法

对象类型 存储在堆中。

例如:
var obj = {
name : "jack"
}
var obj2 = obj ; 将obj的地址传递给obj2
obj2.name = "lily"
alert(obj.name)

什么是面向对象
面向对象是一种编程思想
面向过程和面向对象的区别:
面向过程和面向对象的区别:
面向过程体现的是一种数学逻辑
面向对象体现的是一种生活逻辑
面向对象的优缺点:
优点: 功能独立 便于后期的管理和维护 防止全局变量污染
缺点: 开发周期长 成本高
什么是类(在js中没有类的改变,类就是js中的构造函数)
类是具有相同本质特征和行为的一类事物的总称

类和对象的关系:
类是对象的抽象化(类是对象的抽象) 类是抽象出来的概念
对象是类的具体化(对象是类的具体实例)
先有类还是先有对象?
先有对象 后有累的概念
编程: var arr = new array();
先定义类 ,再从类中创建对象
3、对象的创建方法
字面量的创建方式:
var obj = { }
var obj = new object()
缺点:多个同类对象创建时 代码会重复
2、使用 工厂模式 创建对象 (设计模式之--工厂模式)
优点: 解决多个同类对象创建时代码重复问题
缺点: 对象是通过函数调用的方式创建的 创建对象的方式不规范
不能确定某个对象属于哪一个类(构造函数)
3、使用 构造函数 创建对象
构造函数命名一般是大驼峰格式 ,为了和普通函数进行区分
构造函数中的属性称为实例属性 构造函数中的方法称为实例方法
构造函数中的this 指向 构造函数 new 出来的对象
优点 : 对象使用new 关键字创建的 创建对象的方式规范
能够确定某个对象属于哪一个类 instanceof
缺点 : 多个同类对象的方法会被重复创建 空间不共享
4、 使用 构造函数 创建对象 方法 和属性 都是原创属性 和原型方法
优点 : 使用原型方法 能够解决多个同类对象创建时 空间不共享问题 原型方法空间共享

5、混合 方法 创建对象
属性写在构造函数的内部 作为实例属性
方法写在构造函数的外部 作为原型方法

4、 扩展 使用 object.defineproperty( ) 定义属性 (此内容了解)
语法: object.defineproperty(obj , prop , descriptor )
参数说明:
obj : 必需 。 目标对象
prop : 必需 。 需定义或修改的属性的名字
descriptor : 必需。 目标属性所拥有的特性
例如:
var obj = { }
object.defineproperty(obj,"newkey",{
});
console.log(obj.newkey); // undefined
设置的特性总结:
value :设置属性的值
writable : 值是否可以重写。 true | false false是默认的
enumerable : 目标属性是否可以被枚举。 true | false 如果是枚举对象
可以使用for ...in来遍历
configurable : 目标属性是否可以被删除 true | false

5、原型对象 prototype 也是一个属性(对象),该属性后面可以添加方法
每一个函数都有一个原型对象
每一个构造函数都有一个原型对象
原型对象上的属性和方法能被实例访问

原型对象上的属性和方法不能直接 被子类访问(继承中实现)
javascript 的继承机制基于原理 ,而不是class类

凡是通过new function() 创建的对象都是函数对象,其他的都是普通对象
普通对象没有prototype ,但有_proto_属性
构造函数没有_proto_ 但有prototype 属性
prototype属性(对象)会默认获得一个constructor(构造函数)属性,这个
属性是一个指向prototype属性所在函数的指南针

所有的构造函数都有一个prototype 属性 ,这个属性就称为原型对象
所有的构造函数new出来的对象都有一个 _proto_属性 , 这个属性也对应着一个对象
就是原型对象

6、原型链
实例对象和原型之间的连接 就称为原型链
原型模式的执行流程 :
首先在实例上查找 找到后就返回
继续去 object.prototype 上查找 找到后就返回

面试题:

原型链 作用域链的区别:
原型链是作用在构造函数上 原型链操作的是构造函数的属性 实例属性 原型属性
作用域链是作用在普通函数上 作用域链操作的是全局变量或局部变量
var num = 10;
function fn( num ){
num = 90 ;
}
fn();
alert(num);

7、扩展 原型中的几个关键字
测试某个对象是否属于某个类的方法 isprototypeof( )
语法:构造函数.prototype.isprototypeof(对象):判断一个对象是否指向了该
构造函数的原型对象,可以使用isprototypeof()方法来测试 结果为boolean类型

delete :删除实例属性
语法 : delete 对象.实例属性
hasownproperty( ) 是否包含该实例属性 ,包含返回true ,否则返回false
语法:实例对象.hasownproperty("实例属性")

in 是否存在该属性(原型或实例中)
语法: “属性” in 对象实例

设计模式(了解)
1、什么是设计模式?(以下设计模式内容了解)
设计模式(design pattern) 是一套被反复使用 、多数人知晓的 、 经过分类

编目的 、 代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,
保证代码可靠性。设计模式就是一种 编程规范 架构层面的

2、设计模式之单例模式(重点掌握一下)
单例:对象只能实例化(创建)一次就叫单例
单例模式:字面量的对象声明{ } ,其实在设计模式中可以看作是一种单例模式,所谓
单例模式,就是永远保持对象的一个实例。
var obj = new object( ) ;
var obj = { } ;
obj = { } 一次只能创建一个对象 - 单例模式
// 实现单例模式
// 实现思路 : 将第一次new出来的对象 this 保存到一个变量中 , 返回这个变量
// 再次创建对象时 , 判断 这个变量中是否含有值,如果有值 ,就直接将这个变量返回
function animal( ) {
//为了防止全局变量的污染 使用私有变量代替 全局变量 ins
//在构造函数的内部 可以通过 构造函数名.变量 创建一个私有变量
if(animal.ins ){
return animal.ins ;
}
animal.ins = this
return animal.ins ;
}
单例模式上的属性可以全局 使用

3、设计模式之代理模式(了解)
代理模式:为其他对象提供一种代理 ,并以控制对这个对象的访问。
function a( ) { 领导
this.dance = function( ){

}
}
function b( ) { 经纪人
this . leader = new a( ) ; 代理模式
this.dance = function( ) {
if( .. ){
this.leader.dance( ) ; //在b中实现a中的功能 这个过程就称作代理
}