天天看点

javascript难点

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 指定的新对象。

javascript难点

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

javascript难点

< HTML >

javascript难点

< HEAD >

javascript难点

< TITLE >  New Document  </ TITLE >

javascript难点

< META  NAME ="Generator"  CONTENT ="EditPlus" >

javascript难点

< META  NAME ="Author"  CONTENT ="" >

javascript难点

< META  NAME ="Keywords"  CONTENT ="" >

javascript难点

< META  NAME ="Description"  CONTENT ="" >

javascript难点
javascript难点

< script > ...

javascript难点

function add(a,b)

javascript难点
javascript难点

...{

javascript难点

    alert(a+b);

javascript难点

}

javascript难点

function sub(a,b)

javascript难点
javascript难点

...{

javascript难点

    alert(a-b);

javascript难点

}

javascript难点

add.call(sub,3,1);

javascript难点

function Class1()

javascript难点
javascript难点

...{

javascript难点

    this.name = "class1";

javascript难点

    this.showNam = function()

javascript难点
javascript难点

    ...{

javascript难点

        alert(this.name);

javascript难点

    }

javascript难点

}

javascript难点

function Class2()

javascript难点
javascript难点

...{

javascript难点

    this.name = "class2";

javascript难点

}

javascript难点

var c1 = new Class1();

javascript难点

var c2 = new Class2();

javascript难点

c1.showNam.call(c2);

javascript难点

</ script >

javascript难点

</ HEAD >

javascript难点
javascript难点

< BODY >

javascript难点
javascript难点

</ BODY >

javascript难点

</ HTML >

javascript难点

    Apply();

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

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

继续阅读