Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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 如何获得;这是“价值观”;关于jQuery.ajax_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何获得;这是“价值观”;关于jQuery.ajax

Javascript 如何获得;这是“价值观”;关于jQuery.ajax,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在使用文本编辑器在Firefox11上编写javascript。在下面的例子中,“var n=this.val”变为“未定义”。如何获取原始类对象中的局部值 <html> <body> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> var T

我正在使用文本编辑器在Firefox11上编写javascript。在下面的例子中,“var n=this.val”变为“未定义”。如何获取原始类对象中的局部值

<html>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
var Test = {
    val : 0,
    begin: function(v){
        this.val = v;
        this.recieve();
    },
    complete: function(o){
        var n = this.val;   // undefined
    },
    recieve : function(){
        $.ajax({
            url : "http://www.yahoo.com/",  // Dummy
            type: "POST",
            dataType: "json",
            complete: this.complete,
            timeout: 1000,
        });
    },
};

var c = Object(Test);
c.begin(10);
</script>
</body>
</html>

var测试={
瓦尔:0,
开始:功能(v){
这个。val=v;
这个。receive();
},
完成:功能(o){
var n=this.val;//未定义
},
receive:function(){
$.ajax({
url:“http://www.yahoo.com/“,//虚拟
类型:“POST”,
数据类型:“json”,
完成,完成,
超时:1000,
});
},
};
var c=对象(测试);
c、 开始(10);

完成:这个。完成。
绑定(这个)

这在旧的IE版本中不起作用,但通过一些努力(添加
es5垫片
code),您甚至可以使其在那里工作

complete
函数在ajax请求的上下文中执行。如果您编写这样的代码:

var method = Test.complete;
method();
未被保留,您只需获得该函数的链接即可。
name1.name2()。不仅
name2
应该是
name1
的属性和函数,而且它(name2)还可以在
name1
的上下文中执行

var x = 'outer', b = {
    x: 'inner',
    a: function() { return this.x; }
};
[(b.a)(), (m = b.a)()] // ["inner", "outer"]

complete:this.complete.
bind(this)

这在旧的IE版本中不起作用,但通过一些努力(添加
es5垫片
code),您甚至可以使其在那里工作

complete
函数在ajax请求的上下文中执行。如果您编写这样的代码:

var method = Test.complete;
method();
未被保留,您只需获得该函数的链接即可。
name1.name2()。不仅
name2
应该是
name1
的属性和函数,而且它(name2)还可以在
name1
的上下文中执行

var x = 'outer', b = {
    x: 'inner',
    a: function() { return this.x; }
};
[(b.a)(), (m = b.a)()] // ["inner", "outer"]

由于
complete
是一个回调,因此作用域已更改,
不引用名为
Test
的对象。您只需在
完成
功能中将
替换为
测试

    var n = Test.val;
==更新===

您的问题是“如何在原始类对象中获取局部值?”。我的回答告诉你如何获得静态对象的场

如果需要共享对象,应将结构更改为:

function Test() {
    var self = this;
    this.begin = function(v) {
        this.val = v;
        this.recieve();
    }
    this.complete = function(o) {
        var n = this.val;
    }
    this.recieve = function() {
        $.ajax({
            url : "http://www.yahoo.com/",  // Dummy
            type: "POST",
            dataType: "json",
            complete: function(data) {
                self.complete(data);
            },
            timeout: 1000,
        });
    }
}
现在可以创建两个不同的对象:

var c2 = new Test2;
c2.begin(10);
var d2 = new Test2;
d2.begin(20);

由于
complete
是一个回调,因此作用域已更改,
不引用名为
Test
的对象。您只需在
完成
功能中将
替换为
测试

    var n = Test.val;
==更新===

您的问题是“如何在原始类对象中获取局部值?”。我的回答告诉你如何获得静态对象的场

如果需要共享对象,应将结构更改为:

function Test() {
    var self = this;
    this.begin = function(v) {
        this.val = v;
        this.recieve();
    }
    this.complete = function(o) {
        var n = this.val;
    }
    this.recieve = function() {
        $.ajax({
            url : "http://www.yahoo.com/",  // Dummy
            type: "POST",
            dataType: "json",
            complete: function(data) {
                self.complete(data);
            },
            timeout: 1000,
        });
    }
}
现在可以创建两个不同的对象:

var c2 = new Test2;
c2.begin(10);
var d2 = new Test2;
d2.begin(20);

在完整的处理程序中
不是
测试
。常见的解决方案是为它创建一个代理变量

recieve : function(){
    var proxy = this;
    $.ajax({
        url : "http://www.yahoo.com/",  // Dummy
        type: "POST",
        dataType: "json",
        complete: function(){
              proxy.complete();
        },
        timeout: 1000,
    });
},
或者(在本例中)只需
Test.val
内部函数
complete

complete: function(o){
    var n = Test.val;   
},

在完整的处理程序中
不是
测试
。常见的解决方案是为它创建一个代理变量

recieve : function(){
    var proxy = this;
    $.ajax({
        url : "http://www.yahoo.com/",  // Dummy
        type: "POST",
        dataType: "json",
        complete: function(){
              proxy.complete();
        },
        timeout: 1000,
    });
},
或者(在本例中)只需
Test.val
内部函数
complete

complete: function(o){
    var n = Test.val;   
},

在这种情况下,Test.val将被覆盖。var c=对象(测试);c、 开始(10);var d=对象(测试);d、 开始(20);在这种情况下,Test.val将被覆盖。var c=对象(测试);c、 开始(10);var d=对象(测试);d、 开始(20);