【问题标题】:javaScript Object variable unable to be accessed by from object无法从对象访问 javaScript 对象变量
【发布时间】:2017-05-30 19:57:45
【问题描述】:

我正在使用 jquery .get 函数

我无法使用下面的 javascript 代码对象访问对象变量

function cons1(x){

	this.x = ++x || false;
	this.objectarray1 = [];
	
	if(this.x){
		alert('x has value');
	}
}
cons1.prototype.profun1 = function(){

	alert(this.objectarray1[0]);
	
	$.get('requesting url',{'parameters'},function(data){

		this.objectarray1[0] = this.x;// <-- can place a value
    alert(this.objectarray1[0]);// <-- alerts this.x value
	}.bind(this));
}

var x=1;

var obj1 = new cons1(x);
obj1.profun1();
var y = obj1.objectarray1[0];
alert(y);// <-- gives undefined on screen

【问题讨论】:

  • var y = a1.objectarray1[0]; - a1 突然从哪里来的?
  • 请格式化您的代码,但是看起来 jaromanda 发现了您的问题
  • 顺便说一句 - $.get 是异步的,所以即使你修正了那个错字,你也会发现同样的问题 - 在异步操作有机会之前你得到了 .objectarray1[0]将任何内容添加到.objectarray1[0]
  • 我想你的意思是var y = obj1.objectarray1[0] 一旦你的请求得到解决就应该这样做
  • nah @Andrew,这会产生一个不同的错误 - 关于 a1 很可能没有定义 - 我认为拼写错误根本不是问题 - 它不知道如何使用异步代码问题

标签: javascript jquery javascript-objects google-api-js-client


【解决方案1】:

原代码:

function cons1(x){

	this.x = ++x || false;
	this.objectarray1 = [];
	
	if(this.x){
		alert('x has value');
	}
}
cons1.prototype.profun1 = function(){

	alert(this.objectarray1[0]);
	
	$.get('requesting url',{'parameters'},function(data){

		this.objectarray1[0] = this.x;// <-- can place a value
    alert(this.objectarray1[0]);// <-- alerts this.x value
	}.bind(this));
}

var x=1;

var obj1 = new cons1(x);
obj1.profun1();
var y = obj1.objectarray1[0];
alert(y);// <-- gives undefined on screen

转换为:

function cons1(x){

	this.x = ++x || false;
	this.objectarray1 = [];
	
	if(this.x){
		alert('x has value');
	}
}
cons1.prototype.profun1 = function(){

	alert(this.objectarray1[0]);
	
  $.ajax({// <-- converted to ajax run sync
    url:'requesting url',
    data:{'parameters'},
    async : false,
    success:function(data){
		  this.objectarray1[0] = this.x;// <-- can place a value
      alert(this.objectarray1[0]);// <-- alerts this.x value
	  }.bind(this)
  });
}

var x=1;

var obj1 = new cons1(x);
obj1.profun1();
var y = obj1.objectarray1[0];
alert(y);// <-- now gives value

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多