这是怎么回事:
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();
答案 0 :(得分:2)
var
语句用于声明变量。因此,您尝试定义名称为self.tutu
的变量,该变量在JavaScript中无效,因为变量名称的名称中不应包含.
。这就是为什么语法错误失败的原因。
SyntaxError: Unexpected token .
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;
会正常工作。