精通javascript (一)

 只要能理解对象的行为,引用的处理和作用域的判断,毫无疑问就能改变你编写javaScript的习惯.
 基础,开发习惯,高度与测试技巧,DOM脚本编程与事件处理....Ajax.
 将发展成什么样子.
 相册,自动完成搜索框,完整的Ajax wiki应用...
 
 共四部分:
 认识现代JavaScript
 专业JavaScript开发
 分离式JavaScript
 Ajax
 JavaScript的未来

p29  p37
要点::
注意第4点..
/
关于方法和变量 的总结(大杂混):

   对function User(name,age){
 this.names=name;   //names为公有变量.
 this.getAge=function(){....};//getAge()为特权方法,可以使用私有方法.
 var myage=age;         私有变量.//
 function isGood(){}    私有方法,只能在构造函数中使用.
     }
     User.prototype.isBad=function(){..};//公有方法.
     User.prototype.sex="男";            //公有变量.
     User.cloneUser=function(user){return user;}//静态方法.

对象的创建: 键值要形如:   var obj={ key1:value1,key2:value2,....,keyn:valuen}; 
                          //也可混着,然后obj.xxx=function(){....};
         也可用其它的形式:
  形式一:公有
       对象的方法通过 prototype  对象添加的例子:
 function User(name,age){
  this.name=name;
  this.age=age;
 }
 //添加一个新的函数,注意其上下文是实例化后的对象!!!!
 User.protype.getName=function(){
  return this.name;
 };
 形式二:私有
 只能由构造函数访问私有方法.
 私有方法和私有变量只允许 其他的私有方法,私有变量和特权方法访问.
        function Classroom(strudents,teacher){
  function disp(){
   alert(this.names.join(","));   ///????????????????
  }
  this.students=students;
  this.teacher=teacher;
         //调用私有方法.
         disp();
 }  
 var class=new Classroom(["john","bob"],"Mr.Smith");
 //调用disp()会失败.
 //class.disp();
形式三:特权方法.
 特权方法指代那些能够访问私有变量 同时 允许用户以公共方法 的方式访问的方法.
 例:
    function User(name,age){
  var year=(new Date()).getFullYear()-age;//私有变量.
  this.getYearBorn=function(){
   return year;
  };//特权方法
    }
    var user=new User("Bob",44);
    alert(user.getYearBorn()==1962);
    //user.year;不能访问.
形式四:静态方法.
   相当于类中的静态方法.
 User.clonUser=function(user){
  return new User(//这里是其它对象的复制.
   user.getName(),
   user.getAge()
   );
 );

 


  
  function User(name){
  this.name=name;
  }
         //创建该函数的一个新对象. 
  var me=new User("韩银");
         alert(me.constructor==User);
  //把它作为一个函数来使用:
  User("test");
 //因为它的上下文没有指定,所以默认为window对象.  //可以类比普通的对象.
 alert(window.name="Test");
 //下面使用consuctor:
 var you=new me.constructor();
 alert(me.constructor==you.constructor);
 

                

JavaScript中任何代码总有一个 上下文对象(即 代码在该对象内).第7点.

8.面向对象的基础: 对象,创建,方法(公共,私有,特权,静态)

第5点,作用域:JavaScript的作用域问题:
  JavaScript里,作用域是由函数划分的,而不是由block划分的(如while,if,for语句中间)的.
  所以,即使在一个块中重新命名一个变量,并改变它的值,改变的依然是原来的变量!!
  也就是说......变量只在函数作用域内起作用.
  另外,变量缺乏声明时,即使是在函数中使用,也被当作全局变量,
  也就是说,如果变量没有被显式定义,那么它就是全局变量.
 
//单引号与又引号的区别:无区别...

var dang =('') 和var dang =''是一样的
var dang =("")和var dang ="" 是一样的
上面之所以一样,就好比你做连加运算,多几个括号没任何问题。
{}是js中Object的简单写法,var dang={}和var dang=new Obejct()一样。
[]是js中Array的简单写法,var dang=[]和var dang=new Array()一样。


//如果定义了而没有赋值,则为null
//如果没有定义,则为 undefined          //例如函数有形参,但是使用该函数时没有传递参数.

li[i].οnmοuseοut=function(){
   this.style.backgroundColor='white';
   }; //语句..
{an:"object"}
["an","object"]
function(){}
new User();

1.数组的定义及赋值....当它在参数时.
 var arr=[]; //数组的定义方法.
 new Array([new Lecture(1),new Lecture(2),new Lecture(3)]);
 new Array(); ?
2.DOM 和 JavaScript 事件的结合,是决定所有现代Web应用程序根本所在.
 例 1 :
 <head>
 <script>
  window.οnlοad=function(){
   var li=document.getElementsByTagName("li");
   for(var i=0;i<li.length;i++){
    li[i].οnmοuseοver=function(){
     this.style.backgroundColor='blue';
    }; //语句..
    li[i].οnmοuseοut=function(){
     this.style.backgroundColor='white';
    }; //语句..
   }
  };//语句..
 </script>
 </head>
 
 例 2 :
 <script>
  window.οnlοad=function(){
   var li=document.getElementsByTagName("li");
   for(var j=0;j<li.length;j++)
    li[j].style.border="1px slide #000";
   var every=document.getElementById("every");
   every.parentNode.removeChild(every);//~!!!!!!
  };
 </script>

 //对于一个标签:<p class="style" id="everywhere">gooooooooooood</p>
3.语言特性...
  一:引用.
  例:   多个变量引用同一个对象.
        自修改同一个对象......一个引用只能指向一个对象,而不能是另一个引用.
 hint:!!!对于字符串   var str="good";
        var code=str;
        str+="and bad";
       //则 str现在指向新的字符串,而code 依然指向"good".
  二:函数重载和类型检查.........important.......
 重载的条件:判断传入的参数数量 AND 判断传入参数的类型.
 JavaScript 每一个函数都有一个参数:   argument....它是一个伪数组.不能对其用push(),但是有length.
 例1 :
 function sendMessage(msg,obj){
  if(arguments.length==2)obj.handleMsg(msg);
  else alert(msg);
 }
 
 //仅一个参数调用  
 sendMessage("你好,Mr 韩");
 //交一个自己写的对象传入...
 //然后用用另一套办法显示信息..
 sendMessage("你好吗,朋友?",{  //注意这种建立对象的方式...
  handleMsg:function(msg){
   alert("这是一个客户端的信息:  "+msg);
   }
  }
 });
 //一个接收任意参数并将其转化为数组的函数.
 function makeArray(){
  var arr=[]; //数组的定义方法.
  for(var i=0;i<arguments.length;i++){
   arr.push(arguments[i]);
  }
  return arr;
 }

 例2 : //显示错误信息和默认信息. //用 typeof 进行类型检查...
 function displayerror(msg){
  if(typeof msg=='undefined'){
   msg="出现了一个错误!";
  }
  //显示消息..
  alert(msg);
 }

//如果定义了而没有赋值,则为null
//如果没有定义,则为 undefined          //例如函数有形参,但是使用该函数时没有传递参数.
4.类型检查的方法:
 1.用typeof :if(typeof num=="string"){}
 2.用javascript都有的一个属性,称为构造函数(constructor).//if(num.constructor==String){///}
 // 注意 它们一个为小写,一个有"",一个无.

   区别:
 变量  typeof 变量  变量.构造函数
 {an:"object"}   object   Object
 ["an","arrary"] object   Array
 function(){} function  Function
 "a string" string   String
 55  number   Number
 true  boolean   Boolean
 new User() object   User
5.JavaScript的作用域问题:
  JavaScript里,作用域是由函数划分的,而不是由block划分的(如while,if,for语句中间)的....
  也就是说................................................变量只在函数作用域内起作用.
 因此,如果使用过块划分的语言,则对Js某些语言不好理解..
  例 1:
 var foo="test";
 //在if块中.
 if(true){//注意,现在还在全局作用域中!!!!
  var foo="new test";
  }
 //现在foo为"new test"
 alert(foo==='new test');
 //创建一个修改变量foo的函数.
 function test(){
  var foo="good";
 }
 //然后调用时,foo只在函数作用域内起作用.
 test();
 //确认foo还是"new test"
 alert(foo=="new test");


  所以,即使在一个块中重新命名一个变量,并改变它的值,改变的依然是原来的变量!!
  另外,变量缺乏声明时,即使是在函数中使用,也被当作全局变量,也就是说,如果变量没有被显式定义,那么它就是全局变量.
  全局变量,实际年也是 window对象的一个节点(属性).
6.闭包:
  子函数可以引用包围它的父函数的变量,即使外层函数已经终止!!!!///以后解决!!!
7.上下文对象.
  JavaScript中任何代码总有一个 上下文对象(即 代码在该对象内).
 上下文对象是通过this 体现的,全局对象其实是 window 对象的属性,故在全局上下文中,this也可指向一个对象.
 //例子:p30

       ................再处理....

8.面向对象的基础: 对象,创建,方法(公共,私有,特权,静态)

  创建对象的例子: 
 var obj=new Object();
 obj.val=5;
 obj.click=function(){
  alert("你好"); 
 };

 //下面的与上面的等价: 用{...}简写,结合键值对(key/value pair)来定义属性.
 var obj={//用键值对方式来设置属性名和属性值
  val:5,
  click:function(){alert("你好");};     //引号能不能加上?
  };
      键值要形如:   var obj={ key1:value1,key2:value2,....,keyn:valuen};
9.对象的创建:
  JavaScript中没有类的概念.javascript里对象本身可以用来创建新对象,而对象也可以继承自其他对象.
  这个概念称为原形化继承....
  JavaScript中 任何函数都可以被实例化为一个对象!!!!
     例一:
         function User(name){
  this.name=name;
  }
         //创建该函数的一个新对象. 
  var me=new User("韩银");
         alert(me.constructor==User);
  //把它作为一个函数来使用:
  User("test");
 //因为它的上下文没有指定,所以默认为window对象.  //可以类比普通的对象.
 alert(window.name="Test");
 
 //下面使用consuctor:
 var you=new me.constructor();
 alert(me.constructor==you.constructor);
10.公共方法:
 原型(probotype)的属性包含一个对象,这个对象可以作为所有新对象的基引用.
 因为对象的原型仍然是对象,和其它对象一样,也可以给它们添加新的属性,结果是每个对象都有这个属性.
         //即公有.
   例:对象的方法通过 prototype  对象添加的例子:

 function User(name,age){
  this.name=name;
  this.age=age;
 }
 //添加一个新的函数,注意其上下文是实例化后的对象!!!!
 User.protype.getName=function(){
  return this.name;
 };
11.私有方法.
 私有方法和私有变量只允许 其他的私有方法,私有变量和特权方法访问.
 只能由构造函数访问私有方法.
   例 1:
 function Classroom(strudents,teacher){
  function disp(){
   alert(this.names.join(","));   ///????????????????
  }
  this.students=students;
  this.teacher=teacher;
         //调用私有方法.
         disp();
 }
  
 var class=new Classroom(["john","bob"],"Mr.Smith");
 //调用disp()会失败.
 //class.disp();
12.特权方法.
 特权方法指代那些能够访问私有变量 同时 允许用户以公共方法 的方式访问的方法.
 例:
    function User(name,age){
  var year=(new Date()).getFullYear()-age;//私有变量.
  this.getYearBorn=function(){
   return year;
  };//特权方法
    }
    var user=new User("Bob",44);
    alert(user.getYearBorn()==1962);
    //user.year;不能访问.
       动态生成方法的例子:p37!!!!!!!!!
13.静态方法.
   相当于类中的静态方法.
 User.clonUser=function(user){
  return new User(//这里是其它对象的复制.
   user.getName(),
   user.getAge()
   );
 );
14.关于方法和变量 的总结:

   对function User(name,age){
 this.names=name;   //names为公有变量.
 this.getAge=function(){....};//getAge()为特权方法,可以使用私有方法.
 var myage=age;         私有变量.//
 function isGood(){}    私有方法,只能在构造函数中使用.
     }
     User.prototype.isBad=function(){..};//公有方法.
     User.prototype.sex="男";            //公有变量.
     User.cloneUser=function(user){return user;}//静态方法.

第1章(\第1章) 查看1.2.htm中noscript显示效果的方法如下: 1.将该实例复制到C:\Inetpub\wwwroot下; 2.选择浏览器的“工具”-“安全”-“本地Intranet”-“自定义级别”-“活动脚本”中选用“禁用”单选框 3.在浏览器中输入下述地址:http://localhost/1.2.htm • 1.1.htm 多段代码相互调用 • 1.2.htm <script>与<noscript> • 1.3.htm 调用外部JavaScript文件 • 1.3.js 1.3.htm使用的外部JavaScript文件 第2章(\第2章) • 2.1.htm Infinity应用 • 2.2.htm NaN与isNaN()的用法 • 2.3.htm Infinity值的用法 • 2.4.htm 转义字符的使用 • 2.5.htm 引号的转义使用 • 2.6.htm Bolean值的使用 • 2.7.htm undefinded和null的使用 • 2.8.htm 变量的优先级 • 2.9.htm 数值型数据 • 2.10.htm 数组数据类型 • 2.11.htm 字符串型转换为逻辑型数据 • 2.12.htm toLowerCase()方法 • 2.13.htm 通过字符串调用toLowerCase()方法 • 2.14.htm 使用值的数据操作 • 2.15.htm 对数据的引用执行 • 2.16.htm 字符串的比较 第3章(\第3章) • 3.1.htm 表达式示例 • 3.2.htm 加号运算符应用 • 3.3.htm 数值型数据与字符串连接 • 3.4.htm 数值型数据与字符串连接 • 3.5.htm 减号的取反功能 • 3.6.htm 对变量赋常量值 • 3.7.htm 对变量赋常量值 • 3.8.htm “==”与“=”的区别 • 3.9.htm 比较运算符的区别 • 3.10.htm “++”运算符后置应用 • 3.11.htm “++”运算符前置应用 • 3.12.htm 逗号表达式的连接应用 • 3.13.htm 逗号表达式的连接应用 • 3.14.htm typeof运算符的使用 • 3.15.htm new运算符的应用 • 3.16.htm delete运算符的应用 • 3.17.htm 用()改变运算优先级 • 3.18.htm 运算符结合性 第4章(\第4章) • 4.1.htm 条件语句内单行代码的写法 • 4.2.htm 变量赋初值 • 4.3.htm if…else举例 • 4.4.htm 用else进行更多选择 • 4.5.htm if语句的嵌套之一 • 4.6.htm if语句的嵌套之二 • 4.7.htm switch语句 • 4.8.htm while循环语句 • 4.9.htm do-while循环语句 • 4.10.htm for循环语句 • 4.11.htm for循环语句之二 • 4.12.htm continue语句 第5章(\第5章) • 5.1.htm 函数定义 • 5.2.htm 无返回值的函数 • 5.3.htm 有返回值的函数及其调用 • 5.4.htm 直接使用函数返回值 • 5.5.htm 直接使用函数返回值 • 5.6.htm 直接使用函数返回值 • 5.7.htm 参数变量可变的函数 • 5.8.htm 动态函数 • 5.9.htm encodeURI方法 • 5.10.htm decodeURI方法 • 5.11.htm decodeURI方法 • 5.12.htm decodeURI方法 • 5.13.htm isNaN方法 • 5.14.htm escape方法 • 5.15.htm unescape方法 第6章(\第6章) • 6.1.htm 对象创建与属性调用 • 6.4.htm this关键字的使用 • 6.5.htm 数组的length属性 • 6.6.htm 数组元素遍历 • 6.7.htm 数组元素遍历 • 6.8.htm 数组元素遍历之二 • 6.9.htm 用构造函数来创建数组 • 6.10.htm 用构造函数来创建数组之二 • 6.11.htm join方法 • 6.12.htm revrse方法 • 6.13.htm sort方法 • 6.14.htm alice方法 • 6.15.htm splice方法 • 6.16.htm Object对象 • 6.17.htm anchor方法 • 6.18.htm big方法 • 6.19.htm fontcolor方法 • 6.20.htm 字符串搜索 • 6.21.htm link方法 • 6.22.htm 字符串转换与匹配 • 6.23.htm Date对象的方法 • 6.24.htm toString方法 • 6.25.htm with语句 • 6.26.htm for…in语句调用对象属性 • 6.25.htm for…in语句调用属性值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值