【web】OOP面向对象

概念

  1. 什么是“对象”:不了解内部结构,知道表面的操作 ;
  2. 什么是“面向对象" :不了解原理的情况下,会使用功能 ;
  3. 面向对象是一种思想,生活中处处都可以应用,万事万物都是对象。

面向对象

1.特点:

1.1封装
  1. 不考虑内部实现,只考虑功能使用;
  2. 人的因素:用对象的人;写对象的人(用封装)。
1.2继承
  1. 目的:最大限度重用代码;
  2. 多重继承(慎用);
  3. 遗传,龙生龙凤生凤,老鼠的儿子会打洞。
1.3多态

表现的形式太弱。

1.4抽象
  1. 抓住核心问题;
  2. 抽:抓。

2.组成

  1. 属性:变量:就是同一个东西,场景不同,面向对象 组成 属性 称呼不同 ;
  2. 函数,阐述同上 。

3.缺点

  1. this该方法指向(属于)谁;
  2. this占了95%。

4.js中常见对象

  1. Array:数组,用来存储数据;
  2. Date:日期;
  3. RegExp:正则,用以字符串验证;
  4. Object:可以理解为空对象,啥都没有,没意味着啥都可以往上添加;没有功能。

怎么写对象

1.使用Object

  1. var ogj = new Object( );
  2. new出来的是一个具体对象。

2.字面量创建/json

  1. 写法简易,语法简单,但是重用性低;
  2. 适用于整个程序里只有一个的对象;
  3. var obj = { };

3.工厂方式

function creatPerson(name,qq){

​ var obj = new Object( );

}

4.构造函数创建对象(推荐)

构造函数:开辟内存空间;

析构函数:释放内存。

function My() { 
	this.age=18;
	this.name="xiaoming; 
	this.move =function(){}
{}
var a = new My();
var b = new My();
  1. 这是一种构造函数;
  2. 构造函数就是用来创建对象的;
  3. 为了与其它的函数进行区分,我们将函数名的首字母大写。

为什么a.move == b.move弹出的是false?

5.原型prototype

5.1什么是原型

js中表示该组对象公用的(公共汽车)

5.2类与对象

什么是类:

  1. 模型:月饼模子,Array,Date。
  2. 成品

什么是对象:

产品,实例:月饼,arr=[1,2,3],date。

5.3原型是往类(模型/构造函数)上添加的
 Array.prototype.sum =function(){}
5.4开发常用模式
  1. 构造函数加属性,原型加方法。
  2. 也就是4+原型。

系统对象

1.本地(非静态)

  1. Object
  2. Array
  3. Date
  4. Number
  5. Boolean
  6. String
  7. Function
  8. RegExp
  9. Error

2.内置(静态)

Math

有用过new Math( )?

3.宿主

  1. DOM/BOM
  2. 浏览器提供的

三大特性

1.封装

  1. 目的:将信息隐藏,以上的行为都属于封装
  2. 共有、私有:
function Girl(name,age){
	//共有属性 
	this.name = name; 
	this.age=age;
	//私有属性
	var _sex = "girl";
	//公有方法 
	this.eat = function()(
	alert(“吃饭”);
    }
    //私有方法
    var _xiuxiu = function(){
    alert("美图秀秀”);
    }
}

使用_来表示私有变量及私有方法。

2.继承

目的:

找到共性,精简代码,提高重用性。

目的1.
  1. 属性继承:call(),apply( )

    • 改变父级构造函数内部的this;

    • function People(name){
          this.name = name;
          this.say = function() { 
          alert("hello"); 
          }
      }
      function Student(name){
      	People.call(this,name);
      }
      
  2. 原型继承:B.prototype = A.prototype

    • 这里有引用的问题 ;
    • 修改A就会修改B,修改B就会修改A .
  3. 原型继承(推荐)

for(var x in Aprototype){
	B.prototype[x]=A.prototype[x];
}
目的2.
  1. 子级对象原型指向父级对象实例 ;
  2. B.prototype =new A( );
  3. B.prototype.constructor=B;

3.多态(在js中存在感很弱)

目的:使语言具有动态性,具有更好的通用性。


原型链:对象调用属性或方法的寻找工程。

  • 先在自己的构造函数中寻找,如果没有就到自己的原型中寻找,如果还没有,就到原型的原型中寻找,一直找到Obiect的原型,如果还没有就报错。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值