您好我有一个在
之前没有被搜索过的问题我正在尝试重新编码用于访问google api的JavaScript,以便我可以创建对象以在其他项目中访问它们。 让我解释一下代码,因为我没有在下面发布原始代码代码就像我的代码示例一样
我是一个具有构造函数的函数,并且它具有用'这个'声明的数组。关键词。然后我有一个构造函数的原型,在原型中我创建了一个无名函数来访问服务器的jquery请求输出。但是我无法访问那些数组对象
function cons(){
this.objectarray = [];
}
cons.prototype.profun = function(){
this.objectarray[0] = 'working';
alert(this.objectarray[0]);//Access is possible
$.get('requesting url',{'parameters'},function(data){
alert(this.objectarray[0]);//Access is not possible
});
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
当我尝试访问jquery函数中的对象时,我从浏览器控制台收到此错误
TypeError: this.YouTubeTitle is undefined
&#13;
答案 0 :(得分:2)
您必须缓存this
对象,以便在回调中使用this
关键字时,它引用正确的对象:
function cons(){
this.objectarray = [];
}
cons.prototype.profun = function(){
// this is volatile in JavaScript. It's meaning changes depending
// on the invocation context of the code that contains it. Here,
// this will refer to your "cons" object instance.
var self = this;
this.objectarray[0] = 'working';
alert(this.objectarray[0]);
$.get('requesting url','parameters',function(data){
// But here, "this" will be bound to the AJAX object
alert(self.objectarray[0]); // <-- Use cached this object
});
};
//*************************
var c = new cons();
c.profun();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:1)
在GET-Callback中,有一个本地this
会覆盖你的Prototype-Function的this
。将外部存储在一个命名变量中并在回调中调用它,你会没事的。
let outerThis = this;
somethingWithCallback(function(){
alert(outerThis);
})
答案 2 :(得分:1)
我已经从其中一条评论
找到了解决方法以下代码是解决方案
function cons(){
this.objectarray = [];
}
cons.prototype.profun = function(){
this.objectarray[0] = 'working';
alert(this.objectarray[0]);
$.get('requesting url',{'parameters'},function(data){
alert(this.objectarray[0]);
}.bind(this));//by binding 'this' we can access the 'objectarray'
}
&#13;
感谢来自评论的解决方案@Redu
答案 3 :(得分:0)
您可以使用$.proxy
打包匿名函数以保留外部this
上下文。
function cons() {
this.objectarray = [];
}
cons.prototype.profun = function() {
this.objectarray[0] = 'working';
alert(this.objectarray[0]);
$.get('requesting url', {
'parameters'
}, $.proxy(function(data) {
alert(this.objectarray[0]);
}, this));
}