var a = b.c = function(){}语法的目的

时间:2012-01-15 18:36:00

标签: javascript function syntax

我最近浏览了js代码,以下语法不断出现:

var foo = bar.bi = function() {...}

这对我来说是不熟悉的语法。是否只为同一个函数定义两个名称?如果是这样,为什么不将其定义为bar.bi = function()

5 个答案:

答案 0 :(得分:6)

同时为bi对象的变量和bar属性赋值。

这样对象的属性获取值,但您仍然可以将其作为变量引用,这可能会更快一些。

实际上和...一样......

bar.bi = function() {...};
var foo = bar.bi;

foo === bar.bi; // true

或者您可以将其视为......

var foo = ( bar.bi = function() {...} );

因此,bar.bi的分配首先发生。从赋值表达式返回的结果是相同的函数,并且该结果被分配给foo

答案 1 :(得分:1)

除了将函数分配给2变量外,上下文也会根据您调用它的方式而改变。

bar.bi();

将它的上下文作为bar对象,就好像你会使用它一样:

foo.call(bar);

但是将它从其他变量中删除,就像这样:

foo();

将使用foo的上下文。因此,如果foo在全局上下文中,它将等同于:

bar.bi.call(window);

答案 2 :(得分:1)

它只是一个复合作业

var r = x = 3;

将3分配给x,也分配给新申报的r。

您的示例只是用一个函数代替3,一个对象属性 - bar.bi - 代替x

答案 3 :(得分:0)

取决于它的使用位置。

此处foobar.bi都指向相同的功能。这意味着可以使用

调用该函数
foo();

bar.bi();

同时,函数内this的值不同。为了使第一个等于第二个,它应该被调用,如下所示

foo.call(bar);  

foo.apply(bar);

这可确保this指向函数内的bar

请参阅:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply

答案 4 :(得分:0)

var foo = bar.bi = function() {...};



bar.bi === function() {...} //true

foo === bar.bi //true

bar将是响应方法bi的对象。