欢迎来到天天文库
浏览记录
ID:51690199
大小:64.50 KB
页数:13页
时间:2020-03-15
《JavaScript高级编程之对象扩展与继承.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第1节JavaScriptthis关键字精解1JavaScriptcall()函数:call()方法/apply()的意义在于扩充函数的作用域!JavaScriptfunc.call()定义:Ø若IsCallable(func)为false,则抛出TypeError异常。Ø将argList置空。Ø若方法调用不止一个参数,则按从左向右的顺序将参数添加到argList中。Ø返回func中的方法调用结果,提供thisArg作为this的值,并将argList作为参数列表。① Makeanargumentlist(
2、argList)outofparameters1throughtheend② ThefirstparameteristhisValue③ InvokethefunctionwiththissettothisValueandtheargListasitsargumentlist例子:functionhello(thing){console.log(this+"sayshello"+thing);}hello.call("Yehuda","world")//=>Yehudasayshelloworld以上调用简
3、化:functionhello(thing){console.log("Hello"+thing);}//this:hello("world")//desugarsto:hello.call(window,"world");④ 但ECMAScript5规范对此作了进一步限定,只在严格模式下才会将thisValue绑定到window,而一般情况下,绑定到undefined。原文:afunctioninvocationlikefn(...args)isthesameasfn.call(window[ES5-st
4、rict:undefined],...args).//this:hello("world")//desugarsto:hello.call(undefined,"world");⑤ 内联函数(inlinefunction):(function(){})()isthesameas(function(){}).call(window[ES5-strict:undefined)2成员函数2.1内置成员函数varperson={name:"BrendanEich",hello:function(thing){con
5、sole.log(this+"sayshello"+thing);}}//this:person.hello("world")//desugarstothis:person.hello.call(person,"world");2.2外成员函数functionhello(thing){console.log(this+"sayshello"+thing);}person={name:"BrendanEich"}person.hello=hello;person.hello("world")//stillde
6、sugarstoperson.hello.call(person,"world")hello("world")//"[objectDOMWindow]world"3使用Function.prototype绑定将this绑定到指定对象的方法:varperson={name:"BrendanEich",hello:function(thing){console.log(this.name+"sayshello"+thing);}}varboundHello=function(thing){returnperso
7、n.hello.call(person,thing);}boundHello("world");上述方法一般化:varbind=function(func,thisValue){returnfunction(){returnfunc.apply(thisValue,arguments);}}varboundHello=bind(person.hello,person);boundHello("world")//"BrendanEichsayshelloworld"ECMAScript提供了bind()方法实
8、现上述功能。varboundHello=person.hello.bind(person);boundHello("world")//"BrendanEichsayshelloworld"常用于原生函数作为被调函数:varperson={name:"AlexRussell",hello:function(){console.log(this.name+"sayshelloworld");}}$("#some-di
此文档下载收益归作者所有