略谈javascript中的this

  按照周爱明对语言分类的理论,javascript既有命令式语言中的面向对象特性,又有说明式语言中的函数式特性。这些特性交织在一起往往容易把人绕晕。所以,为了提高js水平,头脑中javascript的这些特性一定要条例清晰。今天先来看看貌似简单的this。

  this是面向对象编程中一个非常重要的特性。在传统面向对象语言(如java)中,this的作用一般是调用本类中的属性、方法或表示当前对象。而javascript中的this的值则取决于函数调用的模式。(注:在函数调用时,函数除了声明时定义的形式参数外每个函数还接收两个附加的参数this和arguments)。

  方法调用模式:this被绑定到该对象
  函数调用模式:this被绑定到全局对象。这是语言设计上的一个错误。倘若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。这个设计错误的后果是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误值,所以不能共享该方法对对象的访问权。解决方案:在该方法中定义一个变量并给它赋值为this,那么内部函数就可以通过那个变量访问到this。
  构造器调用模式:如果在一个函数前面带上new来调用,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将被绑定到那个新对象上。

  apply调用模式:apply方法接收两个参数,第一个将被绑定给this的值。第二个就是一个参数数组。

posted @ 2010-11-16 16:25  慢热君Kevin  阅读(394)  评论(0编辑  收藏  举报