当前位置:Gxlcms > JavaScript > Javascript面向对象编程_js面向对象

Javascript面向对象编程_js面向对象

时间:2021-07-01 10:21:17 帮助过:8人阅读

Javascript的重要性
使用率
1、在web应用中,涉及到前端界面编程基本上都要用到javascript语言;
2、Web2.0及Ajax推动了javascript语言。
3、随着大量的c/s应用转向b/s,富客户端技术的不断推广,javascript语言的应用范围还将不断加大;
javascript的特点
简单
动态
基于对象(面向对象)

Javascript面向对象概述
Javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。他具有面向对象语言所特有的各种特性,比如封装、继承及多态等。但对于大多数人说,我们只把javascript做为一个函数式语言,只把他用于一些简单的前端数据输入验证以及实现一些简单的页面动态效果等,我们没能完全把握动态语言的各种特性。
在很多优秀的Ajax框架中,比如ExtJS、JQuery等,大量使用了javascript的面向对象特性,要使用好ext技术,javascript的高级特性,面向对象语言特性是我们必须完全把握的。

Javascript的相关知识
Javascript的发展历程
Javascript的三大组成部分
ECMAScript
语法\数据类型\语句\关键字保留字操作符对象
DOM(Document Object Model)
BOM(Browser Object Model)

JavaScript灵活特性探讨
1、动态语言的灵性测试
Javascript作为一种动态语言,具有非常灵活的我发,在使用的过程中需要灵活掌握及应用他的动态特性,才会得心应手。
思考下面的输出
代码如下:

function Animal(name){
this.name=name;
this.age=0;
};
var a1=Animal;//输出:
var a2=Animal();//输出:
var a3=new Animal();//输出:
var a4=new Animal;//输出:


Javascript中的数据类型
基本数据类型
数字(Numbers)
字符串(Strings)
布尔Boolean
特殊值(null、undefined、NaN)。
对象类型Object
对象属于复杂的数据类型,对象下面可以包含基本类型、对象、函数等,数组是一种对象类型。对于javascript来说,可以说一切都是对象,包括类!。
var c=new Object();
1、数字类型
  数字类型是所有语言中都存在的基本数据类型,javascript中的数字类型主要包括整型(Int)与浮点型(Float)两种,但实质两种类型都是以浮点的形式保存在内存中。数字类型在javascript中一般与数字常量的形式出现在程序中,一般情况下是基于10进制的数据,由0-9这10个数字组成,比如110、150等,而也可以是以0x开头(由0-9以及a到f等16个字符组成)的16进制数据,比如0xff转换成10进制就是255(即 15*16 + 15 = 255);一些javascript实现还支持8进制数据,也就是以0开头的数据(由0-7这8个数字组成),比如0377 这个八进制数据转换成10进制就是255,即( 3*64 + 7*8 + 7 = 255 )。
2、字符类型
  字符串由各种字符、数字及特殊字符串组成,可以在程序中直接使用单引号或双引号来生成字符串常量。字符串中不能有回车符,要在字符串包含回车需要使用转义字符 。下面是一些简单的字符串常量:
"" // The empty string: it has zero characters
'testing'
"3.14"
'name="myform"'
"Wouldn't you prefer O'Reilly's book?"
"This string\nhas two lines"
"π is the ratio of a circle's circumference to its diameter"

3、布尔Boolean
布尔类型用来表示真或假,在javascript中,当用于布尔运算时,除了0、空字符、null、undefined、NaN等以外的数据都是表示真。
if(0||""||false||null||undefined||NaN)alert("有一个条件返回true了");
布尔常量只有false及true,False及True不是常量。

4、对象类型
javascript是基于对象的语言,对象是其核心。

程序流程控制
顺序结构
if条件选择语句
switch选择语句
while循环语句
do while语句
for循环语句
break与continue语句

for...in循环语句
for(变量 in 集合或对象)
{
执行语句块
}
代码如下:

输出6
alert(sum(100,200,500,900));//输出1700

使用Function类创建函数
创建动态函数的基本语法格式:
var varName = new Function(argument1,...,lastArgument);
说明:
所有的参数都必须是字符串型的,最后的参数必须是这个动态函数的功能程序代码。
例子:
代码如下:

输出:
window.b();//输出:
b.call(b1);//输出:
b.apply(b2);//输出:


词法作用域(lexcical scope)。通俗地讲,就是javascript变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,编译器通过静态分析就能确定,因此词法作用域也叫做静态作用域(static scope)。但需要注意,with和eval的语义无法仅通过静态技术实现,所以只能说javascript的作用域机制非常接近词法作用域(lexical scope).
javascript引擎在执行每个函数实例时,都会创建一个执行环境(execution context)。执行环境中包含一个调用对象(call object)
调用对象是一个scriptObject结构(scriptObject是与函数相关的一套静态系统,与函数实例的生命周期保持一致),用来保存内部变量表varDecls、内嵌函数表funDecls、父级引用列表 upvalue等语法分析结构(注意varDecls和funDecls等信息是在语法分析阶段就已经得到,并保存在语法树中。函数实例执行时,会将这些信息从语法树复制到scriptObject上)。

apply and call:它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别:
apply(thisArg,argArray);
call(thisArg[,arg1,arg2…] ]);
即所有函数内部的this指针都会被赋值为thisArg,这可实现将函数作为另外一个对象的方法运行的目的。

apply的说明
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisArg任何一个参数,那么 Global 对象将被用作 thisArg,并且无法被传递任何参数。

call的说明
call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisArg指定的新对象。如果没有提供 thisArg参数,那么 Global 对象被用作 thisArg

重点(the point):
应用call和apply还有一个技巧在里面,就是用call和apply应用另一个函数(类)以后,当前的函数(类)就具备了另一个函数(类)的方法或者是属性。
在浏览执行的javascript中,默认情况下对象的作用域为window。
c.run();
window.c.run();

JavaScript中的系统函数(Global类)
encodeURI及encodeURIComponent方法
返回对一个URI字符串编码后的结果。
decodeURI及decodeURIComponent()方法
将一个已编码的URI字符串解码成最初始的字符串并返回。
parseInt方法
将一个字符串按指定的进制转换成一个整数,语法格式为:parseInt(numString, [radix])。如果没有指定第二个参数,则前缀为 ‘0x' 的字符串被视为十六进制,前缀为 ‘0' 的字符串被视为八进制,所有其他字符串都被视为是十进制。
parseFloat方法
将一个字符串转换成对应的小数。
isNaN方法
用于检测parseInt和parseFloat方法的返回值是否为NaN。
escape方法
返回对一个字符串进行编码后的结果字符串。所有空格、标点、重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中xx等于表示该字符的Unicode编码的十六进制数,字符值大于255的字符以%uxxxx格式存储。
unescape 方法
将一个用escape方法编码的结果字符串解码成原始字符串并返回。
eval 方法
将其中的参数字符串作为一个JavaScript表达式执行。

JavaScript的内部类
动态对象
使用“对象实例名.成员”的格式来访问其属性和方法。
静态对象
直接使用“对象名.成员”的格式来访问其属性和方法。

Object类(对象)
Number类(对象)
String类 (对象)
Math类(对象)
Date类(对象)
toString方法

Object类
Object类是所有javascript类的基类,提供了一种创建自定义对象的简单方式,不需要程序员再定义构造函数。
主要属性:
constructor-对象的构造函数
prototype-获得类的prototype对象,static性质
主要方法:
hasOwnProperty(property)-是否属于本类定义的属性
isPrototypeOf(object)-是否是指定类的prototype
propertyIsEnumerable(property)-是否可例举的属性
toString()-返回对象对应的字符串
valueOf()-返回对象对应的原始类型值