对象不能更改其自身成员的值
objects unable to change its own member's values
我创建了对象类型a,其中有成员x和y,还有一些函数改变成员的值。我见过在调试器中更改成员。但是所有的成员都没有改变。你能解释一下吗?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>
奇怪的是,如果我写一个函数来访问成员,可以获得正确的值。为什么? ?
当您想要修改对象属性时,必须显式地涉及this
:
function getX() {
return this.x;
}
function getY() {
return this.y;
}
function processX() {
this.x = 1;
}
function processY() {
this.y = 100;
}
在原始代码中,这四个函数中对"x"answers"y"的引用将被解析为外部函数(称为"a"的函数)中的局部变量"x"answers"y"。该"a"函数包括一个名为"y"的参数和一个用于"x"的var
声明。
相关文章:
- 不能从angular2中的子组件指定父组件中的数组
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 转义符不能与innerHTML一起使用
- JSON.parse没有'不能使用Javascript
- JS可以在Chrome中工作,但不能在Firefox中工作
- 砌体不能填补小缺口
- javascript扫雷器floodfill算法不能正常工作
- 包含一个集合的1到3个成员但其中一个成员不能单独存在的正则表达式
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 为什么“;成员不能具有@private JsDoc“;
- 为什么我不能将数组作为成员添加到我的对象中
- 为什么我的数据类成员不能直接使用?
- Wordpress -致命错误:"在非对象上调用成员函数get_var();但前提是不能作为模板
- 对象不能更改其自身成员的值
- Javafx的WebView不能访问类的成员.带有修饰符“public”
- 构造函数的原型不能覆盖公共成员,这是真的吗?
- 私有成员(使用闭包),为什么初始化后添加的函数不能访问私有成员?
- 错误TS1112:类成员不能声明为可选
- 不能抓取ASP.NET/MVC“Model"成员放入JQuery函数中