如何在原型函数中访问javascript对象Arrays

时间:2017-05-29 18:52:34

标签: javascript arrays object

您好我有一个在

之前没有被搜索过的问题

我正在尝试重新编码用于访问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;
&#13;
&#13;

当我尝试访问jquery函数中的对象时,我从浏览器控制台收到此错误

&#13;
&#13;
TypeError: this.YouTubeTitle is undefined
&#13;
&#13;
&#13;

4 个答案:

答案 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)

我已经从其中一条评论

找到了解决方法

以下代码是解决方案

&#13;
&#13;
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;
&#13;
&#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));
}