ASP.NET AJAX深入浅出系列课程(学习总结二)

13.
Object对象

var o = new Object(); // {}; {name : "Jeffrey"}
o["name"] = "Jeffrey";
与下面的是等价的
var o = new Object() {name : "Jeffrey"}
object对象可以用作字典,

  function useForInStatement()
  {
   var dict = new Object();//设置一个字典,
   for (var i = 0; i < 10; i++)
   {
    var key = "key_" + i;
    dict[key] = Math.random();
   }//创建字典里面的内容
   
   delete dict["key_5"];//从字典中删除其中一个对象
   delete dict.key_4;
   //从字典对象中删除一个对象,两种方法效果一样。
   for (var key in dict)
   {
    display("Key: " + key + ", Value + " + dict[key]);
   }//将字典里面的内容输出。
  }
14.Array对象

构造Array对象
   new Array():空数组
   new Array(3)长度为3的数组
   new Array(1,"Hello"):构造有两个元素的数组

 Array.prototype
   .length属性:数组的长度,可读写
   .toString()/toLocaleString()方法
        --返回逗号分割的字符串
        --两者的区别是得到每个对象字符串的方式
   .concat()方法
        --返回一个新数组,保存了原数组所有元素和所有参数
   .push
        --在数组尾添加一个或多个元素
   .pop方法:
        --从数组尾去除并返回元素
   .shift方法
        --从数组头去除并返回元素
   .unshift方法
        --在数组头添加一个或多个元素
   .join(sep)方法
        --返回以sep作为分割符得到一个连接所有元素的字符串
        --StringBuilder的基础,可以为IE加快字符串拼接速度
  .reverse()方法:将数组内所有元素逆转。
  .sort(compareFunction)方法
        --参数为了一个方法,用于比较两个元素
        --省略了参数则直接使用<,==,>比较两个元素
  .slice(start,end)方法
        --返回新数组,不影响旧数组
        --包含从下标start开始到下标end-1的元素
        --如果省略end 则包含从下标start开始至末尾的所有元素
        --如果参数为负数,则表示数组的"倒数"第几个下标,
        --如果start元素在end元素之后或相同,则返回空数组
  .splice(start,deleteCount[])
        --最灵活的方法,影响当前数组
        --从下标start的元素开始,删除deleteCount个元素,并在当前start位置开始插入剩余元素
        --删除元素:splice(2,1)
        --插入元素:splice(2,0,"Hello","World")
        --替换元素:splice(2,1,"Hello","World")
<script language="javascript" type="text/javascript">
  function display(text)
  {
   document.getElementById("info").innerHTML += (text + "<br />");
  }
  
  Array.prototype.display = function()
  {
   window.display("a: " + this);
  }
//display 显示内容
  
  var a = new Array(1, 2, 3, 4, 5); // a = [1, 2, 3, 4, 5];
  display("Array initialized");
  a.display();
  //构造新数组
  display("a.push(6, 7)");
  a.push(6, 7);
  a.display(); // [1, 2, 3, 4, 5, 6, 7]
  //添加元素

  display("a.shift(): " + a.shift());
  a.display(); // [2, 3, 4, 5, 6, 7]
  //从头去除元素

  display("a.unshift(8)");
  a.unshift(8);
  a.display(); // [8, 2, 3, 4, 5, 6, 7];
  //在头部添加元素

  display("a.pop();" + a.pop());
  a.display(); // [8, 2, 3, 4, 5, 6];
  //从数组尾去除元素

  display("a.concat(9, 10): " + a.concat(9, 10)); // [8, 2, 3, 4, 5, 6, 9, 10];//拼接字符串,且不影响原数组
  a.display(); // [8, 2, 3, 4, 5, 6]
  
  display("'[' + a.join('][') + ']': " + '[' + a.join('][') + ']'); // [8][2][3][4][5][6];//拼接数组
  
  display("a.slice(2, 5): " + a.slice(2, 5)); // [3, 4, 5]
  display("a.slice(2, -2): " + a.slice(2, -2)); // [3, 4]
  a.display();
  
  display("a.splice(3, 2)");
  a.splice(3, 2);
  a.display(); // [8, 2, 3, 6],删除元素
  
  display("a.splice(2, 0, 7, 8)");
  a.splice(2, 0, 7, 8);
  a.display(); // [8, 2, 7, 8, 3, 6],插入元素
  
  display("a.splice(3, 1, 9, 10)");
  a.splice(3, 1, 9, 10);
  a.display(); // [8, 2, 7, 9, 10, 3, 6]
  
  display("a.reverse()");
  a.reverse();
  a.display(); // [6, 3, 10, 9, 7, 2, 8],逆转元素
  
  display("a.sort()");
  a.sort();
  a.display(); // [10, 2, 3, 6, 7, 8, 9]//对元素进行排序
  
  display("a.sort(function(x, y){ return y - x; });");
  a.sort(function(x, y){ return y - x; });
  a.display(); // [10, 9, 8, 7, 6, 3, 2];
 </script>


  <title>Array forEach</title>
  <script language="javascript" type="text/javascript">
   function method(elt, index, array)
   {
    this.result += "[" + index + ". " + elt + "] ";
   }
   
   var items = "I am Jeffrey Zhao".split(" ");
   var obj = {result : ""};
   Array.forEach(items, method, obj);
   
   alert(obj.result);
  </script>

15.Error对象

function对象

Boolean对象

Microsoft AJAX Library中提供的唯一扩展
parse静态方法
Boolean.parse("true") // 返回true
Boolean.parse("fAlSe") // 返回false
16.Number原生类型

整数表示法
   var num = 50; // 10进制表示法
   var num = 060; // 48,8进制表示法
   var num = 0xFF; // 255,16进制表示法
浮点数表示法
   var num = 5.0;
   var num = 3.2e9; // 3.2*10^9,科学计数法
浮点数的范围
  MAX_VALUE
  MIN_VALUE
极值
   POSITIVE_INFINITY
   NEGATIVE_INFINITY
   Not an Number(NaN)
 parseInt32(number,10);//把一个数字转换为整型,10进制数,必须把第二个参数10加上,否则容易出错
<script language="javascript" type="text/javascript">
  function display(text)
  {
   document.getElementById("info").innerHTML += (text + "<br />");
  }
 
  display("Max Value = " + Number.MAX_VALUE);
                //Max Value = 1.7976931348623157e+308
  display("Min Value = " + Number.MIN_VALUE);//Min Value = 5e-324
  display("--------------");
  
  display("Positive Infinity = " + Number.POSITIVE_INFINITY);//Positive Infinity = Infinity
  display("Negative Infinity = " + Number.NEGATIVE_INFINITY);//Negative Infinity = -Infinity
  display("1 / 0 = " + (1 / 0))//1 / 0 = Infinity
  display("Max Value * 10 = " + (Number.MAX_VALUE * 10));//Max Value * 10 = Infinity
  display("Max Value + 10 = " + (Number.MAX_VALUE + 10));//Max Value + 10 = 1.7976931348623157e+308
  display("Infinity / 10 = " + (Number.POSITIVE_INFINITY / 10));//Infinity / 10 = Infinity
  display("--------------");
  
  display("NaN = " + Number.NaN);//NaN = NaN
  display("parseInt('ABC') = " + parseInt('ABC'));//parseInt('ABC') = NaN
  display("3 - 'ABC' = " + (3 - "ABC"));//3 - 'ABC' = NaN
  display("(NaN == NaN) = " + (NaN == NaN));//(NaN == NaN) = false
  display("(NaN != NaN) = " + (NaN != NaN));//(NaN != NaN) = true
  display("isNaN(NaN) = " + isNaN(NaN));//isNaN(NaN) = true
 </script>
17.
Date原生类型
    UTC时间:国际标准时间
      GMT, Greenwich Mean Time
   表示日期和时间
      一个数字,表示相对于UTC时间1970年1月1日0时整的毫秒数偏移量
     每个Date对象存储的永远只是一个数字
     时间只有一个,时差是表现上的概念
  Date.prototype.getTimezoneOffset()
     获得时差的分钟数

    var d1 = new Date();表示当前时间的对象(时差是表现上的概念)
    var d2 = new Date(0);表示UTC时间1970年1月1日0时整
    var d3 = new Date(2007, 5, 6);本地时间2007年6月6日0时整,月从0开始(0到11表示一月到十二月)
    var d = new Date(Date.UTC(2007, 5, 6));表示UTC时间2007年6月6日0时整
String原生类型
    .split(str):分割字符串至数组
    .substring(start[,end])
     --得到子字符串
     --从下标start开始,到下标end-1为止
     --如果没有提供end,则是整个字符串
    .slice方法
     --与substring方法功能几乎相同
     --如果start小于零,则表示倒数第N位(start+length),end也一样
    .split(str):分割字符串至数组

  <div id="info"></div>
  <script language="javascript" type="text/javascript">
   function display(text)
   {
    document.getElementById("info").innerHTML += (text + "<br />");
   }

   display(String.format("Today is {0}.", new Date()));
                       //Today is Fri Sep 26 16:52:21 UTC+0800 2008.
   display(String.localeFormat("今天是{0:dddd}", new Date()));//今天是星期五

  </script>
18.命名空间,类,接口、接口
命名空间
   .合理的组织大量的类型
     --使开发人员能够方便地找到他们需要的类型
     --并非仅仅避免命名冲突
   .可重复注册
    --每个独立的脚本模块前都要注册命名空间以保证命名空间的存在
Type.registerNamespace("MyNamespace");

   .定义步骤
     -定义构造函数
     -定义成员
     -注册类
   .类的构造函数即为function定义
   .通常用于初始化域变量
   .私有成员使用下划线开头(无法真正封装)
       -this._myPrivateField;
       _this._myPrivateMethod();
  构造函数
  Type.registerNamespace("MyNamespace");
  MyNamespace.MyClass=function(param1,...)
  {
      this._myField=null;
  }
 类-定义方法
  .基于prototype定义
   MyNamespace.MyClass.prototype={
     myMethod1:function(){...},
     myMethod2:function(){
         this.myMethod1();//this保留字不可少
       }
   }
  类-定义属性
   .Microsoft AJAX Library的面向对象类型系统将add_和set_开头的方法认作属性
   .避免定义只定属性,使用某个方法替代

  类-注册类
   MyNamespace.MyClass.registerClass('MyNamespace.MyClass');
  类-抽象类
   .包含抽象方法的类即为抽象类
    MyNamespace.MyClass.prototype{
         this._myMethod=function(){
       throw Error.notlmplemented();
         }
    }
   类-继承
    .调用父类的构造函数
     --没有父类的类可以省略这步
     --有父类的类必须调用父类的构造函数,否则会失去继承效果
     MyNamespace.MyClass=function(){
        MyNamespace.MyClass.initializeBase(this,[param1,...]);
 }
   注册类时提供父类
   可以直接以普通方式实现父类的抽象成员
   MyNamespace.MyClass.registerClass(
    'MyNamespace.MyClass',MyNamespace.MyParentClass);

接口

  .与类的定义基本相同
  .构造函数抛出异常
  .注册接口时使用registerInterface方法
  .接口无法继承其他接口
19.异步通讯层的组成
 .WebRequest类
   --收集(存储)请求信息
 .WebRequestExecutor类
   --发送请求 反馈服务端回复的结果
 .XMLHttpExecutor
   --封装了XMLHttpRequest的Executor
 .WebRequestManager类
   -用于管理异步通讯层与服务端的通信

异步通讯层组件协作过程

  .WebRequest被构造并调用invoke方法
   --WebRequestManager确定Executor
   --触发WRM的invokingRequest事件
   --执行Executor的executeRequest方法
 .Executor返回/超时或被取消
   --执行WebRequest的 completed方法
       .触发WRM的completedRequest事件
       .触发WebRequest的complete事件
实现ScriptReferenceExecutro
    -aborted
    -responseAvailable
    -responseData
    -started
    -statusText
    -timedOut
    -xml


/
Forms Authentication的使用
  .ASP.NET2.0中对于简化了FormAuthentication的使用
    -FormsAuthentication表态类
  .可以使用最常见的ASP.NET验证来保护WebService
    -FormsAuthentication

身份验证功能login()方法
Sys.Service.AuthenticationService.login(
userName,//用户名
password,//密码
isPersistent,//是否生成持久Cookie
customInfo,//预留字段
redirectUrl,//登陆成功后跳转目标
loginCompletedCallback,//身份验证完成回调函数
failedCallback,//身份验证出错回调函数
userContext//用户任意指定的上下文对象
)
function loginCompletedCallback(
   validCredentials,//身份验证是否成功
   userContext,//用户随意指定的上下文
   methodName//即"...login"
){...}

function failedCallback(
  error,//错误对象
  userContext,//用户随意指定的上下文
  methodName//即"...login"
){...}

  .注销功能 logout方法
  Sys.Service.AuthenticationService.logout(
    redirectUrl,//注销后跳转页面
    logoutCompletedCallback,//注销成功回调函数
    failedCallback,//注销失败回调函数
    userContext//用户任意指定的上下文对象
)

function logoutCompletedCallback(
   validCredentials,//身份验证是否成功
   userContext,//用户随意指定的上下文
   methodName//即"...logout"
){...}

function failedCallback(
  error,//错误对象
  userContext,//用户随意指定的上下文
  methodName//即"...logout"
){...}
//
Authentication Service的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值