bianbian coding life

便便代码人生: 关注技术, 翻译文档, 偶尔动动手

[原] 关于Javascript的this关键字答网友问

Posted by bianbian on 2008-03-25 01:57


本文Tags: , ,

发信人: Net (BBS上没有什么事情是bg不能解决的), 信区: WebDesign
标 题: Re: Javascript问题
发信站: 南京大学小百合站 (Tue Mar 25 01:16:03 2008)

Javascript里的this和其他OO语言不一样
Javascript其实并不适合做OO,其实OO也并不适合Javascript
扯远了。。。。。。
this你就当“执行函数的宿主”理解。因此在一串函数的执行过程中,this不停地在变。

  1. A = {
  2.     member: "OK",
  3.     method: function () {
  4.         alert(this.member);
  5.     }
  6. };
  7. B = A.method;
  8.  
  9. A.method(); //弹出"OK". A是宿主,this.member == A.member
  10. B();        //弹出undefined. window(缺省)是宿主,this.member == window.member

为了解决这个问题,很多框架对此进行了包装。
比如Prototype,用bind,实际是动态生成一个function,把宿主作为动态function的执行者,这样对用户来说,this似乎没有变化。

  1. bind: function() {
  2.     if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
  3.     var __method = this, args = $A(arguments), object = args.shift();
  4.     return function() {
  5.       return __method.apply(object, args.concat($A(arguments)));
  6.     }
  7.   }

实际只要明白this是执行者的指针,一切都可迎刃而解。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript, Technology | No Comments »