当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JavaScript 中级笔记 第二章

Javascript
将HTML自动转为JS代码
一端时间轮换的广告
制作特殊字的脚本
美化下拉列表
文字幻灯片
判断是否输入完毕再激活提交按钮
JS控制表格隔行变色
左右两侧的广告代码 简单
父窗口获取弹出子窗口文本框的值
网页的标准,IMG不支持onload标签怎么办
一个很简单的办法实现TD的加亮效果.
文本框栏目介绍
自动检查并替换文本框内的字符
会自动逐行上升的文本框
列表内容的选择
对textarea框的代码调试,而且功能上使用非常方便,酷
提高代码性能技巧谈—以创建千行表格为例
Javascript的IE和Firefox兼容性汇编
让插入到 innerHTML 中的 script 跑起来
DEFER怎么用?

Javascript 中的 JavaScript 中级笔记 第二章


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-10   浏览: 83 ::
收藏到网摘: n/a

对象是组成JavaScript的基本单元。本章将从JavaScript语言中最重要的几个部分开始介绍:引用,函数重载,作用域,闭包和上下文。有了这些知识后,面向对象开发就将变得简单。 1,引用
引用是一个指向对象实际位置的指针。看下面的使用引用的例子:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

本例中,两个对象都指向同一个对象,当修改某一个对象的属性内容时,则会影响另一个。
我们再来看一个例子,这次我们利用数组来讲解引用:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

如果在arr被重新定义后,则引用就不是同一个对象了,如下代码所示:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

接下来我们来看一个比较特殊点的例子,关于字符串的引用问题。
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

正如本例所示,在执行字符串操作时,结果总会是一个新的字符串对象,而非字符串的修改版。
不知道大家看过<<JavaScript高级程序设计>>书中的有一节讲的是 传值和传址,说白了,就是引用。有兴趣可以去看看。
JavaScript就是一门通过维护一系列对其它对象的引用的语言,通过引用,可以给程序带来极大的灵活性。
2,函数重载
函数重载的特性就是根据传入的不同数量或类型的参数,通过重载函数来发挥不同的功能。它必须依赖2件事情:一是判断传入参数的数量 ,二是判断传入参数的类型。
2-1,判断传入参数的数量
JavaScript的每个函数都带有一个仅在这个函数范围内作用的变量称为参数,它是一个包含所有传给函数的参数的伪数组,虽然有length属性。
通过arguments,我们能够获取到这个伪数组。如下所示:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

arguments是一个非常有用的东西,在看下面的一个功能函数,它能将任意数量的参数转换为数组。
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

2-2,判断传入参数的类型
第一种判断类型的方式:
判断类型需要用到JavaScript中另一个操作符——typeof。 它用来表达变量内容的类型,返回的是字符串。比如如果一个变量是字符串,那么typeof后,则返回( "string" )。
经常我们会用到如下判断:
复制代码 代码如下:

if( typeof num == "string" ){
num = parseInt( num );//如果是一个字符串,则把字符串解析出整数
}
if( typeof arr== "string" ){
arr= arr.split(",");//如果是一个字符串,则根据逗号来分割成数组
}

例如把前面的makeArr()函数改成只能接受字符串类型的参数,代码如下:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

最终结果 a.length 为2,因为后面2个参数是number 类型。
第二种判断类型的方式:
此方法需要引用所有JavaScript对象都带有的一个属性,构造函数——constructor。这一属性引用的是原本用来构造该对象的那个函数。
复制代码 代码如下:

if( num.constructor == String ){
num = parseInt( num );//如果是一个字符串,则把字符串解析出整数
}
if( arr.constructor == String ){
arr= arr.split(",");//如果是一个字符串,则根据逗号来分割成数组
}
if( newArr.constructor == Array ){
newArr = newArr.join(",");//如果是一个数组,则根据逗号来组成字符串
}

执行constructor后的结果是一个对象,而执行typeof后的结果是一个字符串。看下表的对比:
变量 typeof 变量 变量.constructor
{a:"b"} "object" Object
["a","b"] "object" Array
function(){} "function" Function
"a" "string" String
66 "number" Number
true "boolean" Boolean
new User() "object" User
通过对传入参数的数量和类型的判断,那么函数重载也就简单了。