javascript难点

来自:http://blog.csdn.net/fzy816/archive/2007/12/11/1929697.aspx

 

Javascript支持复合数据类型------对象,对象标识的是值(既可以使基本值:如数字和字符串,也可以是复合值)的集合。 Javascript中的对象有两种,一种对象表示的是已命名的值的无序集合,另一种表示的是有编号的值的有序集合。 后者被称为数组,从根本上来说,Javascript中的对象和数组是同一种数据类型。

NULL

 

Javascript的关键字null是一个特殊的值,它表示“无值”。Null常常被看作对象类型的一个特殊值。即代表“无对象”的值,如果一个变量的值为null,那么你就会知道它的值不是有效的对象、数组、 数字、字符串和布尔值。

Undefined

 

几种情况会返回这个undefined

l        使用了一个并未声明的变量

l        使用了已经声明但还没有赋值的变量

l        使用了一个不存在的对象属性的时候

l        Null==undefined true

 Javascript变量的类型:

 

l        基本类型:固定大小,八个字节

l        引用类型:大小不固定,保存地址,类似于指针。

Javascript变量内存的分配:

 

由于字符串、对象和数组没有固定大小,所以当它们的大小已知时,才能对它们惊醒动态的存储分配。Javascript程序每次创建字符串、对象或数组时,解释器都必须分配内存来存储那个实体。只要像这样动态分配了内存,最终都要释放这些内存以便他们能够被再用,否则,Javascript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。好在javascript自动垃圾回收。

Javascript的执行环境:

 

Javascript的解释器每次开始执行一个函数时,都会为那个函数创建一个执行环境。显然,一个执行环境就是所有Javascript代码段执行时所在的环境,这个环境的一个重要部分就是定义变量的对象。因此,运行不属于任何函数的Javascript代码的环境使用的就是全局对象。所有的Javascript函数都运行在自己独有的执行环境中,而且具有自己的调用对象,在调用对象中定义了局部变量。

Javascript变量的作用域:

 

全局变量是全局对象的的属性,局部变量是一个特殊的调用对象的属性,每个Javascript执行环境都有一个和它关联在一起的作用域链。这个作用域链是一个对象列表或对象链。当Javascript代码需要查询变量x的值时(一个称为变量名解析的过程),它就开始查看该链的第一个对象,如果那个对象有一个名为x的属性,Javascript就会继续查询链中的第二个对象。如果第二个对象仍然没有名为x的属性。那么就继续查询下一个对象,依次类推。

 

Function的疑难点:

l        Arguments对象:在一个函数体内,标识符arguments具有特殊含义。它是调用对象的一个特殊属性,用来引用arguments对象。Arguments对象就象叔祖,可以按照数字获取传递给函数的参数值。但它不是真正的Array对象。

数组arguments[]还为JavaScript函数开发了一项重要的可能性,即可以编写函数使之能够使用任意数目的实际参数。

属性callee:用来引用当前正在执行的函数。

l        Function对象:

Length属性:实际的形式参数的个数,而不是传的参数。

Prototype属性:它是预定义的原型对象,原型对象在使用new运算符把函数作为构造函数时起作用。它在定义新的对象类型时起非常重要的作用。

Call();

调 用一个对象的一个方法,以另一个对象替换当前对象。call方法可改变上下文this指针,类似的方法还有apply,只是调用方式上有些不同,call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function add(a,b)
{
    alert(a
+b);
}

function sub(a,b)
{
    alert(a
-b);
}

add.call(sub,
3,1);
function Class1()
{
    
this.name = "class1";
    
this.showNam = function()
    
{
        alert(
this.name);
    }

}

function Class2()
{
    
this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();
c1.showNam.call(c2);
</script>
</HEAD>

<BODY>

</BODY>
</HTML>

 

    Apply();

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针

posted on 2009-04-03 09:45  5201314  阅读(519)  评论(0编辑  收藏  举报

导航