我创建了具有成员x和y的对象类型a,还有一些函数改变了成员的值。 我已经看到成员在调试器中被更改了。但没有一个成员被改变。你可以解释吗? x和y的行为有什么不同吗?一个是局部变量,另一个是参数。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div id="debug"></div>
<script src="Scripts/jquery-2.0.0.min.js"></script>
<script>
function a(y) {
var x = 0;
return {
x: x,
y: y,
getX: getX,
getY: getY,
processX: processX,
processY: processY,
}
function getX() {
return x;
}
function getY() {
return y;
}
function processX() {
this.x = 1;
}
function processY() {
this.y = 100;
}
}
$(function () {
var objs = [];
for (var i = 0; i < 3; i++) {
objs[i] = a(i);
}
objs[0].processX();
objs[1].processY();
objs.forEach(function (o) {
$("#debug").append($("<p>").text(o.x + " " + o.y));
$("#debug").append($("<p>").text(o.getX() + " " + o.getY()));
//result:
//1 0
//0 0
//0 100
//0 1
//0 2
//0 2
});
});
</script>
</body>
</html>
奇怪的是,如果我写一个函数来访问成员,可以获得正确的值。 为什么???
答案 0 :(得分:4)
当您想要修改对象属性时,您必须明确地涉及this
:
function getX() {
return this.x;
}
function getY() {
return this.y;
}
function processX() {
this.x = 1;
}
function processY() {
this.y = 100;
}
在原始代码中,对这四个函数中的“x”和“y”的引用将被解析为外部函数内的局部变量“x”和“y”(称为“a”的函数)。该“a”函数包括一个名为“y”的参数和一个“x”的var
声明。