JavaScript分配自变量

时间:2014-04-29 07:20:31

标签: javascript

这是怎么回事:

function Test() {
    this.t=function() {
        var self=this;
        self.tutu = 15;
        console.log(self);
    }
}
var olivier = new Test();

这有效:

function Test() {
    this.t=function() {
        var self  = this,
            other = -1;
        self.tutu = 15;
        console.log(self);
    }
}
var olivier = new Test();

无法工作(错误SyntaxError: Unexpected token .):

function Test() {
    this.t=function() {
        var self  = this,
            other = -1,
            self.tutu = 15;
        console.log(self);
    }
}
var olivier = new Test();

4 个答案:

答案 0 :(得分:2)

var语句用于声明变量。因此,您尝试定义名称为self.tutu的变量,该变量在JavaScript中无效,因为变量名称的名称中不应包含.。这就是为什么语法错误失败的原因。

SyntaxError: Unexpected token .

引自Variables section in MDN

  

JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。由于JavaScript区分大小写,因此字母包括字符“A”到“Z”(大写)和字符“a”到“z”(小写)。

     

从JavaScript 1.5开始,您可以在标识符中使用ISO 8859-1或Unicode字母,例如å和ü。您还可以将\ uXXXX Unicode转义序列用作标识符中的字符。

答案 1 :(得分:1)

var只能用于声明变量,但不能用于表达之前。

var self.tutu = 15;无效。

答案 2 :(得分:1)

最后一个模式不起作用,因为您在变量声明块中创建了self的属性。您可以将代码重写为:

var self = (this.tutu = 15, this),
           other = -1;
/* self = (this.tutu = 15, this) =>
   (,) creates a group. Using the comma operator,
   the statements within the group are evaluated from
   left to right. After evaluation self is a reference to this
   and this now also contains the property tutu */

答案 3 :(得分:1)

非常相似: Multiple left-hand assignment with JavaScript

根据这个答案,你实际上是这样做的:var self = (window.other = (self.tutu = 15)),当然会给出SyntaxError,因为你试图在self.tutu存在之前分配self

我不确定是否有办法以这种方式进行并行分配,但当然

var self = this;
var other = -1;
self.tutu = 15;

会正常工作。