Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55832
  • 博文数量: 10
  • 博客积分: 415
  • 博客等级: 一等列兵
  • 技术积分: 93
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-12 15:34
个人简介

爱就一个字!

文章分类

全部博文(10)

文章存档

2012年(8)

2011年(2)

分类: 系统运维

2012-01-08 23:28:40

最近在读Programming LanguagesPragmatics的时候又看到了这个,虽然似乎不是什么值得提的事,为了避免忘记还是记下来。 


JavaScript里的this就是被调用对象的引用。形象的说,就是那"."之前的那个对象的引用。 
JavaScript里虽然有函数(类型),也有函数(对象),但在调用的时候总是跟某个对象绑定在一起来调用的。直接调用一个看似没有跟什么对象绑定的函数,实际上是跟"全局"对象绑定在一起了。在浏览器DOM里这个全局对象就是window。 
当使用new运算符来构造新对象时,new之后跟着的那个构造器里的"this"指向的就是由new而构造出来的一个空的新对象。这个对象里暂时什么都还没有(有是有,不过DontEnum看不到罢了),而构造器里的this.xxx形式的赋值就能够创建给那个对象新的属性。 

说到底,JavaScript里的“对象”不过就是关联数组罢了。按Concepts of ProgrammingLanguages一书里的讲法,JavaScript里的对象与perl里的hash是很像的。现下流行的JSON也正是利用了这个特性而发展出来的。 

可以看看下面这段代码: 

Js代码  

1.   

20.  



虽然我们在第一次调用fooConstructor()时并没有以"object.method()"的形式来调用,它实际上等价于window.fooConstructor()。于是我们把window对象(浏览器DOM里的"全局"对象)隐式传给了所调用的函数,在fooConstructor里this就指向了window,并为window对象创建了variable属性,赋值为1。 

makeAnonymousFunction()()的调用是为了演示这个this的指向与嵌套层次的无关性。makeAnonymousFunction()返回了一个函数对象,不过我们没有为这个对象给予一个名字,而是直接调用了它。与前一例一样,这个调用为window对象创建了一个名为gooValue的属性,并赋值为2。 

然后我们演示了以new运算符来创建新对象的状况。这个很普通没什么需要解释的了~

阅读(1132) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~