总结JavaScript中的this

mac2022-06-30  72

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

最新回复(0)