[小心得]对JS的运行时概念的理解
今天在一网页看到下面这三段代码:
一、
window.name = "window"; var run = function() { alert("My name is " + this.name); } run();
二、
window.name = "window"; object = { name: "object", run: function() { alert("My name is " + this.name); } }; object.run();
三、
window.name = "window"; object = { name: "object", run: function() { var inner = function(){ alert("My name is " + this.name); } inner(); } }; object.run();
在那篇博文中,博主这样介绍说“javascript是一门动态语言,最明显就是那个dynamic this。它一般都是作为函数调用者存在。在javascript,所有关系都可以作为对象的一个关联数组元素而存在。那么函数就是被掰成两部分储存于对象,一是其函数名(键),一是函数体(值),那么函数中的this一般都指向函数所在的对象。但这是一般而已,在全局调用函数时,我们并没有看到调用者,或者这时就是window。不过,函数声明后,其实并没有绑定到任何对象,因此我们可以用call apply这些方法设置调用者”
而我当时没有理解博主的意思,按我想的算出结果和实际结果总是相反,后来我自己想通了,然后和同事交流,他说我的想法是错误的,我不相信,于是写了一个个的小实例,然后我终于明白了。回头再看看博主的介绍,豁然开朗!我开始不理解是因为我是用编译型语言的方式来理解的,但同事的讲解和演示的实例清楚的说明了JS是一个解释型的语言。用同事的话说——“看JS代码,一定要注意它的运行时的概念”。回过头来看博主说的动态语言,有异曲同工之妙。
这个this在你没执行前你根本不知道它代表什么,只有在它执行的那一瞬间,~~哈~~。
当时我们写了好多的例子,我只把其中我认为最重要的一个写下来吧,剩下的功能和上面那个博主的代码是差不多的
window.name = "window"; object = { name: "object", run: function() { alert("My name is " + this.name); } }; window.run = object.run; window.run(); object.run();
代码引用网址:http://www.cnblogs.com/rubylouvre/archive/2009/11/13/1602122.html