JavaScript中的函数是可以动态改变的

来源:互联网 发布:linux ssh服务宕了 编辑:程序博客网 时间:2024/06/06 00:28

JavaScript中用{}括起来的就是一个对象,在定义一个对象的时候,跟其他语言类似,有成员变量和成员方法。但是,不同的是,成员方法的实现是可以变动的,对于这一点,我到今天才知道,或许有很多人也是(在耐心看完这篇分享后)。

<html>    <head>        <script type="text/javaScript">            //定义一个变量            var a = {                hello:function(){                    alert("这是我定义最初的样子");              }            //首次调用            a.hello();            a.hello=function  () {             alert("我第一次改变了");              };            a.hello();            //第二次调用            (function($){                $.hello = function (){                    alert("这是第二次改变");                }            })(a);            //第三次调用            a.hello();        </script>    </head></html>

执行的结果就是依次打印出了
这是我定义最初的样子
我第一次改变了
这是第二次改变

因为并不是太复杂,不需要拆解下来一个个说明,这里就一下子贴出了整个代码。
其实看起来也容易明白,就是三种形式而已。但是这三种形式,追随到本来源,都还是一致的,javascript允许变量在任何时候赋予任何值,并且,函数其实也是一个对象。

            //在后面我又加上了这么一段            a = "hello";            alert(a);            try {                 a.hello();            } catch (e) {                alert("我再也不能调用a.hello()方法了");            }

执行的结果应该很清楚了
hello
我再也不能调用a.hello()方法了

可能不理解的或许是这么一段

            (function($){                $.hello = function (){                    alert("这是第二次改变");                }            })(a);

这是什么鬼?

其实这是我看到一个博客中对他进行了说明我才理解下面我把原文贴出来,下面的内容和不是本文的一部分,转载于网络.


上面的实现代码,如果您一眼就能看懂,证明您是经常封组件的大虾了,下面的就不用看了。如果看不懂,也没关系,我们将代码拆开详细看看里面是什么鬼。
首先看看我们最常看到的如下写法:

(function ($) {   //....封装组件逻辑})(jQuery);

初初看到这种用法,博主也是狂抓,这是什么鬼嘛,四不像啊。使用多了之后才知道原来这就是一个匿名函数的形式。将它拆开来看如下:

var fn = function($){    //.....组件封装逻辑};fn(jQuery);

也就是说这种写法就表示先定义一个方法,然后立即调用这个方法,jQuery相当于实参。打开jquery.js的原文件可以看到,jQuery是这个文件里面的一个全局变量。


0 0
原创粉丝点击