初步走向面向对象

A.

学习一门语言,入门需要掌握:关键字,字符串的操作,集合操作(数组,键值对),文件(js没有)。讲的是基于ECMAV3版本过渡到V5的版本 V6

1.别的语言面向对象都来源于c++

2.94-95年,为了表单验证(验证邮箱,注册等)JavaScript里面面向对象就是键值对的集合,  为了看起来像c++语言,引入许多的语法糖

3.函数也是变量,跟字符串abc,数字123都一样。键值对也是变量。复合类型(对象类型) 就由基本类型组合而成。

  基本类型:(number,string,boolean),大写的是一个包装类型,是一个包装构造函数, 是一个包装对象。

  复合类型:Number,String,Date,Array,Object,RegExp,Function,Math

4.typeof是string类型

5.in运算符------------是判断一个对象里面是否具有某个属性

  语法:boolean“name”in Object

6.判断对象有某个属性成员还可以怎么处理?w7 IE8; XP IE6

7.函数或者方法也是一个变量名,不加(),就直接访问变量

浏览器能力检测的代码

ifdocument.getElementdByClassName{

//有该方法

}else{

//没有该方法

}

鸭子辨型(只要具有鸭子的特征,就是鸭子)

JavaScript中创建对象用new运算符,字面量(直接量)

区别:new+构造函数,可以复用

直接量直接使用

//引出重要:值类型,引用类型(对象)

值类型:存在栈上,按值传递(将变量中的数据完整的拷贝一份, 赋值给新的变量

引用类型:引用类型表示变量存储的是数据的地址( 引用 )  地址一般是利用指针来操作的

关联数组

B.

var o3={

 n:[1,2,3],

 m:{n:123}

}

javascript是没有办法访问地址

解析引擎会把nm绑定在一起,访问就快

function就是重复执行的代码块

1.逻辑中断

1. ||

如果第一个为真 就返回第一个表达式, 如果为假 则返回第二个表达式

  &&

如果第一个为假 就返回第一个表达式, 如果为真则返回第二个表达式

**************表达式1 && 表达式2 && 表达式1*********

先验证是否满足 表达式1 如果满足 就执行表达式2 的验证

验证如果失败返回 假

验证如果成功返回 表达式

2.delete 删除 运算符

语法:  boolean  delete 数据;

功能: 在当前作用域上删除数据

用法:

1,删除数组中的一个元素(不会删除数组长度,会当成undefined)

2,删除一个对象的属性或方法(jquery中的缓存框架,像数组的键值对)

3,删除一个没有用 var 声明 变量

3.报错会结束代码的运行异常处理

1.try-catch是if-else的增强

 有些时候代码的错误是需要处理的, 但是又不清楚是否会在这里报错

 try-catch 的语法:

try {

    //可能出现错误的代码

} catch ( e ) { // 可以打印e.name 错误类型 e.massage  详细错误信息

//如果出现错误才会执行

} finally { // 可选

//无论是否出现异常, 最后执行

}

* 这里的错误有一个术语叫 异常 exception

// try 试一下

//catch 抓住 ------ 异常

*  自己抛出异常(自定义错误)

   throw

 语法: throw 对象    //throw new Error( msg )

  一般对象是 new Error( '错误消息' );

4.函数的创建

1.声明式函数,可以在上面调用(js解析过程)

2.函数的字面量(Lambda表达式)------------ 此时函数作为 表达式 存在

  凡是将数据 和 运算符等联系起来有值的式子就是表达式

  注:函数的声明式不允许出现在表达式中(如果写了,要么报错,要么默认转换为表达式)   函数的字面量允许出现在任何地方.

3.new Function

//比较全的查询

1. Mdn---------

2. w3school----------入门,不全

C.

传统的构造函数的方式

1.对象

从代码的角度考虑:键值对的集合

2.什么是面向对象?(从两个方面回答)

  1>.面向对象和面向过程的思想

  2>.JS中的面向对象和其他语言中的面向对象的表现形式

  面向过程:所有的细节步骤过程必须一步一步亲力亲为,顺序不能颠倒

  面向对象:找到能够完成这个功能的对象。执行者变为调度者(管理者),对象还是面向过程。

   总:面向对象是对面向过程的包装。

3.为什么面向对象--全局污染

  在js中重复的var无效

  便于开发,污染更少,便于维护

4.面向对象的基本模型

 1>.将数据和功能封装成函数(方法)

 2>.将相关的功能绑定到一块(对象)

 3>.将功能进行分组(模块)

5.DOM操作复习

  html作为一个字符串很难处理,把它看成“对象”好操作。

   增:增加元素,增加属性,增加内容

   删,改,查,其他(CSS--轮播图)

   DOM是典型的面向对象

 

6.json的表示法,对象的直接量(把变量打包)

Var p={

‘Name’:”jim”,

‘Age’:  ,

‘Sex’:

};

  json 对象的方法:简单,方便,简洁,复用不高的可以用

  使用 json 对象的方法有一个缺点: 无法复用

 

 构造方法也是一个函数,就是为了复用

  1>.构造函数命名一般首字母大写(但并不是绝对)

  2>.构造函数(构造函数里面不需要return,它的return有别的含义)

  3>.为对象添加成员使用this.成员名=(利用对象的动态特性给对象添加成员)

  缺:每次都写。。。。。。。。。。所以要传参

7.在参数中写变量的好处是:

  1>.相当于声明了变量,

  2>.调用时又一次赋值

  在JS里面写函数,尽量的把名字写的越短越好。

   在js中重复的var无效

   形参:形式参数,占位符

   实参:实际传的参数

 Token:表示语法错误

构造函数方法的复用

电脑很卡的话:放固态,放内存

Cpu解码硬盘中的文件,那会非常的慢,传统的硬盘是叫机械硬盘(光盘+机械粒),

机械粒有硬盘损耗

1G=1024M

Cpu的主频: 1秒钟能执行多少条指令

固态硬盘-------->内存------->缓存

JavaScript不是原生的代码,是寄宿在浏览器里运行的代码

分析的结论:

1.JavaScript运行是需要内存的

2.按之前的方式写,表示每一个函数都具有那个函数的一个副本,比较消耗内存

所以我们希望方法共享

 

原型(prototype

在函数里面,有一个属性,叫prototype,只要是函数,就有Prototype属性

由该函数创建的对象会默认连接到该属性上,Prototype也是一个对象

在访问对象的某一个属性(方法)的时候,首先会在当前对象中查找有没有该属性。

如果当前对象没有,就会在构造方法的定义规则中查找。(当前对象)

如果没有,就会到与对象联系起来的构造函数的prototype属性中找。

以上3点总结起来1句话在访问一个对象属性的时候,首先在当前对象中找,如果没有在其原型对象(创建它的构造函数的原型属性)中找。

对象会到与它联系的Prototype中找数据,可以考虑将共享的数据,放到里面。这样,无论调用几次,都只有一个副本。

调试:__proto__是灰色的,说明不是当前对象里面默认的

对象中有一个属性,叫__proto__

通过调试可以发现 : 对象的__proto__与创建它的构造函数prototype , 是同一个东西。

__proto__是非标准属性(IE8不支持),将来可能会归为标准属性。在开发时尽量不要使用它

F.prototype  原型属性

O.__proto__ 原型对象

F.prototype 是构造函数F 的 原型属性

F.prototype 是对象O的 原型对象

注:以上的描述在将来工作中或许会改变,因为它没有被规范化

小结:

1.面向对象的复习   

2.为什么要使用面向对象  

3.面向对象带来的一些优势:作为一个开发者或对象的创建者,优势并不是很大,因为代码  量更大,更复杂了;但是如果用创建的对象来做,进行二次开发(比如用jQuery),会提高你的开发效率

面向对象是找对象帮你做事,但它本身可能是面向过程的

基本类型转化。。。

内置对象里的方法array对象 data对象 math方法.....

          四舍五入一定要掌握,在不同的浏览器精度处理是不一样的

函数的操作要敏感,每写一句代码都问自己为什么

为什么最后封装那么写?因为传统的构造函数会浪费我们的内存

为什么写构造方法?因为对象的字面量不能复用

为什么要写对象?因为繁复的方法放在作用域当中,会影响到我全局作用域当中的其他变量

为什么写函数?因为很长的代码写的容易出错

DOM的操作,DOM属性和方法parentnode,nextsbling,previousSbling,firstchild,lastchild,元素节点(nodetype=1)和文本节点的区分(nodetype=3),属性节点(nodetype=2)nodetype=11 ?  

属性操作:getAttribute,setAttribute

appendChild,insertbefore.......

函数就是在定义一个公式,一个规则,先做什么,再做什么。。。。。。。。在做这个公式的时候,需要替代的东西,把它变成参数

原文地址:https://www.cnblogs.com/ting-0424/p/5659167.html