小鬼之家

流浪,游走于文明与原始之间. 关注底层技术,实现美好生活。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Javascript是一种动态语言,它的语法相当的灵活自由,再加上DOM对象是相当的丰富,以至于它成为了WEB开发中比较麻烦的一块。为了便于查找,我记录下自己的一些零碎的记忆。


学习Javascript和学习其它的语言没有太多的区别,都是要看得懂几个语句的用法,例如if、for、while等,但javascript有它的一些特点,需要懂得更多一些才能比较顺利地阅读一些所谓高手写的代码;例如:


var a = {say:function(msg){alert(msg);}};


a.say('Hello world.');


我们得到了一个简单的而又有点别扭的Hello World程序,简单是因为它只是alert出来一条消息,而别扭是我们必须要看得懂{}这样写法的表达式。用{} 和[]来表达数据的就是所谓的JSON表达式,具体的可参看http://www.json.org/这个网站的描述,如果还不清楚,可以网上搜搜关于js面向对象的文章。


在了解了JSON表达式之后,我们还需要知道,在Javascript里,函数的内部是可以有函数的,函数是可以没有名字的,


例如:


(function(x){


      alert(x);


})(123);



function abc(x){


      alert(x);


}


abc(123);


是等价的。如果你现在还没看明白,你要试着把它想明白,如果你想不明白,那你就记住它们是等价的先吧。


如果已经明白了上面的两种书写js的风格,那我们能很方便地读懂大多数的js代码库了。现在来说说与js密切相关的dom,我们的js的绝大多数的任务就是对dom对象进行操作,以完成数据较验、局部刷新、动态效果等。所有的html标签表示的东东都是dom里的组成部分,几乎所有的js也都可以从dom里找到。或许我这样说是不精确的,但希望大家能看得明白就好。


例如:


function say(x){


      alert(x);


}


var b = window['say'];


b(‘Hello world.’);


b实际上就是一个指向say的指针,也就是说b就相当于函数say.从这个例子我们可以看出来全局函数say实际上存在于对象window中的一个对象,也就是说所有的东东在dom里表示都是一个个的对象的组合,也就是所谓的dom树了。如果你看不明白也没关系,因为我根本就没说明白;如果你明白了,说明你不用看也已经明白了;关键的是我们知道我们可以通过对window对象可以很方便地在不是全局作用域的地方给全局的作用域设置对象。


例如:


(function(){


      var _cvv = window.cvv,  cvv = window.cvv = function(x) {


        alert(x);


     };


})()


这样我们就可以得到一个全局的函数cvv,我们可以通过cvv(‘Hello world.’)来调用这个函数。当然,我们也可以改改来返回一个真正意义的对象,


例如:


(function(){


      var _cvv = window.cvv,  cvv = window.cvv = function(x) {


        return new init(x);


     };


 


       function init(x){


                      alert(x);


                      return this;


       }


})()


现在这个例子返回的对象是没有任何方法的对象,那我们又能通过什么样的形式给它添加方法呢?熟悉js的人一定会想到prototype这个东东,至于它是什么我们可以不管,我们只需要知道它能动态地给实例添加方法就好了。


例如:


(function(){


  var _cvv = window.cvv,  cvv = window.cvv = function() {


         return new init();


      };


         function init(){


                                return this;


         }


         init.prototype = {


                                say:function(x){


                                                alert(x);


                                }


         }


})()


cvv().say(‘Hello world’);


说了上面的这些东东,或许是应该说一下arguments、call、apply了,执行下面的例子,我们能很清楚地了解到它的作用。

Arguments 的例子:

function log(x) {

  alert(typeof x + '|' +  arguments.length);

}

log();

log(1);

log("1", "2", "3");

从这个例子我们可以知道我们能从arguments得到函数的参数列表,这是一些js库常用的技巧之一。

 

call、apply的例子:

function log() {

  alert(this + '|' +  arguments.length);

}

 

log();

log.call('Hello', [1, 2, 3]);

log.apply('Hello', [1, 2, 3]);

执行这个例子,我们就能很清楚地知道call和apply的区别和作用了。它们都是把’Hello’赋给了log函数的this,区别在于call把[1, 2, 3]当成一个参数传给log函数,而apply把[1, 2, 3]当成三个参数传给了log.

  先说这些吧,至于所谓的闭包之类的东东,还有基本的js语句等,那就不说了。

posted on 2009-08-04 14:32  黄尚  阅读(2347)  评论(11编辑  收藏  举报