Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象无法更改其自己的成员';s值_Javascript_Object - Fatal编程技术网

Javascript 对象无法更改其自己的成员';s值

Javascript 对象无法更改其自己的成员';s值,javascript,object,Javascript,Object,我已经创建了对象类型a,它有成员x和y,还有一些函数可以改变成员的值。 我看到调试器中的成员已更改。但是没有一个成员被改变。你能解释一下吗? x和y的行为有什么不同吗?一个是局部变量,另一个是参数 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <

我已经创建了对象类型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>

函数a(y){
var x=0;
返回{
x:x,
y:y,
getX:getX,
格蒂:格蒂,
processX:processX,
过程:过程,
}
函数getX(){
返回x;
}
函数getY(){
返回y;
}
函数processX(){
这个.x=1;
}
函数processY(){
这个y=100;
}
}
$(函数(){
var objs=[];
对于(变量i=0;i<3;i++){
objs[i]=a(i);
}
objs[0].processX();
objs[1].processY();
objs.forEach(函数(o){
$(“#调试”).append($(“”).text(o.x+“”+o.y));
$(“#调试”).append($(“”).text(o.getX()+“”+o.getY());
//结果:
//1 0
//0 0
//0 100
//0 1
//0 2
//0 2
});
});
奇怪的是,如果我写一个函数来访问成员,就可以得到正确的值。
为什么???

当您想要修改对象属性时,必须明确地涉及

        function getX() {
            return this.x;
        }
        function getY() {
            return this.y;
        }
        function processX() {
            this.x = 1;
        }
        function processY() {
            this.y = 100;
        }

在原始代码中,这四个函数中对“x”和“y”的引用将解析为外部函数(称为“a”的函数)中的局部变量“x”和“y”。该“a”函数包括一个名为“y”的参数和一个“x”的
var
声明。

当您想要修改对象属性时,您必须显式地涉及

        function getX() {
            return this.x;
        }
        function getY() {
            return this.y;
        }
        function processX() {
            this.x = 1;
        }
        function processY() {
            this.y = 100;
        }

在原始代码中,这四个函数中对“x”和“y”的引用将解析为外部函数(称为“a”的函数)中的局部变量“x”和“y”。“a”函数包含一个名为“y”的参数和一个“x”的
var
声明。

因此,如果我不这样做,它将生成一个新的局部变量?我怎么能访问这些值?@user1978421在这种特殊情况下,“processX”函数中的“x”将指函数“a”中声明的“x”,而“processY”中的“y”将指函数“a”中的“y”参数。它指的是返回块中的x和y的哪个x和y??相同的。如果没有本地
var
声明,那么JavaScript将一步一步地查看封闭函数的各个层。如果没有显式声明,那么“x”和“y”将被视为全局变量(除了现在的“严格”模式,在这种情况下,这样的引用将是错误的)。哦,我明白了。所以它真的在引用它自己!那么,如果我不这样做,它会生成一个新的局部变量吗?我怎么能访问这些值?@user1978421在这种特殊情况下,“processX”函数中的“x”将指函数“a”中声明的“x”,而“processY”中的“y”将指函数“a”中的“y”参数。它指的是返回块中的x和y的哪个x和y??相同的。如果没有本地
var
声明,那么JavaScript将一步一步地查看封闭函数的各个层。如果没有显式声明,那么“x”和“y”将被视为全局变量(除了现在的“严格”模式,在这种情况下,这样的引用将是错误的)。哦,我明白了。所以它真的在引用它自己!局部变量(
var
keyword)和功能参数之间没有区别,但对象属性(成员)之间有一个区别。局部变量(
var
keyword)和功能参数之间没有区别,但对象属性(成员)之间有一个区别。