1.理解 this为晚绑定. 确定的值为最终调用时所依附的对象, 即xxx.yyy()语法. 没有指定则为全局对象, 网页中为window对象. 赋值语句仅复制函数对象的引用. 函数定义时的绑定信息将被丢弃. 2.实际 由于this于运行时会被改写,一个常见的技巧是用var o_this = this, 然后通过闭包传递. 可以通过Funtion的apply方法手工绑定this, 模拟C#中委托中的行为.
var g_prefix = " I'm a " , g_postfix = " . " ; var g_says = function (prefix, postfix) { alert(prefix + this .msg + postfix);}window.msg = " windoW " ; var man = { msg: " maN " , says: g_says, hisCat: { msg: " caT " , says: g_says } }g_says(g_prefix, g_postfix); // I'm a windoW. man.says(g_prefix, g_postfix); // I'm a maN. man.hisCat.says(g_prefix, g_postfix); // I'm a caT. man.simulateCatSayingButFail = man.hisCat.says; // Want to simulate cats saying.. man.simulateCatSayingButFail(g_prefix, g_postfix); // ..but fails. The man is saying "I'm a maN." // Really want to simulate cat saying? Function.prototype.bind = function (obj) { var o_this = this ; return function () { return o_this.apply(obj, arguments); };}man.simulateCatSaying = man.hisCat.says.bind(man.hisCat); // Want to simulate cats saying.. man.simulateCatSaying(g_prefix, g_postfix); // ..Now saying "I'm a caT."
转载于:https://www.cnblogs.com/FlyingCat/archive/2009/09/16/this_in_javascript.html