鉴于JavaScript已经closures,这个关键字的目的究竟是什么?
给定以下代码,我们可以看到闭包有助于在其范围内包含variables的值:
var f = new Foo('jim','jam'); var b = new Bar('saul','paul'); var bz = new Baz(); function Foo(jim,jam){ this.jim = jim; this.jam = jam; function log(){ console.log('jim:',jim,'jam:',jam); } return log; } function Bar(jim,jam){ function log(){ console.log('jim:',jim,'jam:',jam); } return log; } function Baz(jim,jam){ this.jim = 'bark'; this.jam = 'catch'; function log(){ console.log('jim:',this.jim,'jam:',this.jam); } return log; } f(); b(); bz();
那么,JavaScript中“ this
” this
关键字的用途究竟是什么呢? 什么时候有必要?
该关键字用于访问当前的上下文,与当前的作用域不一样。
如果你调用一个对象的方法,那个调用的上下文就是对象。 您可以使用this
关键字来访问对象中的属性:
function Foo(jim,jam){ this.x = jim; this.y = jam; } Foo.prototype.log = function(){ document.write('jim:' + this.x + ', jam:' + this.y); }; var f = new Foo('jim','jam'); f.log();
当必须显式引用上下文对象时, this
关键字是必需的。 你的函数并不是很好的例子,因为你已经为函数参数使用了相同的对象属性名称。 如果你让他们不同,可能会更清楚:
function Foo(pjim, pjam){ this.jim = pjim; this.jam = pjam; function log(){ console.log('jim:',jim,'jam:',jam); } return log; }
该版本将基本上不起作用 – 名称“吉姆”和“果酱”将不会对应于log
function中的任何东西。