在研究 google plusone 脚本时,我多次看到以下语法:
(0, _.Em)();
假设_.Em
是一个函数,上面的语句将导致调用该函数,这是非常明显的。另一方面,如果它是未定义的,结果岂不是与简单地执行相同_.Em()
?
任何人都可以阐明使用这种语法背后的想法吗?
基本上,这个语法允许调用_.Em()
在的背景下window
对象而不是_
.
假设您有以下代码:
Foo = function() {
this.foo = "foo";
};
Foo.prototype.Em = function() {
alert(this.foo);
};
var _ = new Foo();
Issuing _.Em()
将导致Em()
在上下文中被调用_
。在函数内部,this
关键字将参考_
, so foo
将被打印。
Issuing (0, _.Em)()
将方法调用与对象解耦,并在全局上下文中执行调用。在函数内部,this
关键字将参考window
, so undefined
将被打印,因为window
没有foo
财产。
您可以测试两种语法之间的差异这把小提琴 http://jsfiddle.net/yqdwS/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)