Javascript:获取作用域变量



我正在写一个计数器来计数一个对象,它看起来像这样:

function myFunc(param) {
  this.param = param;
  param.foo = function() {
    var object = window.JSON.parse(data);
    for (i in object) {
      counter++;
    }
  }
}
var foo = new myFunc('data.json');
var counter = 0;
document.write(counter); // displays 0

我该如何实现获取函数外的计数器值?我几乎什么都试过了,从windowreturn再到分离functions

有线索吗?

更新

我更喜欢像这样更好的设计

function myFunc(param) {
  this.param = param;
  param.foo = function() {
    var object = window.JSON.parse(data);
    var counter = 0;
    for (i in object) {
      counter++;
    }
    return counter;
  }
}
var foo = new myFunc('data.json');
document.write(counter); // displays undefined

更新2

很抱歉,我认为有一个示例代码会更容易。但这里是真正的一个:https://gist.github.com/BobWassermann/e709ec303477a015b609

我认为您有几个问题。

首先,在编写之前将counter设置为0。无论你做什么,它都将永远是0,即使是吊装。

其次,您永远不会调用foo函数,因此您的counter永远不会递增。

第三,param.foo不是公开的。我想你希望它是this.foo = function(){ ... }

这是你发布的代码的简化版本,我做了一些调整:

var counter = 0;
var foo;
function myFunc() {
  this.foo = function() {
    counter = 1000;
  }
}
foo = new myFunc();
foo.foo();
document.write(counter);

JSFiddle:http://jsfiddle.net/dgrundel/2ojw2332/2/请注意,JSFiddle不允许使用document.write,因此更换了该部件。

function myFunc(param) {
    this.param = param;
    this.foo = function () {
        var object = window.JSON.parse(this.param),
            counter = 0,
            i;
        for (i in object) {
            counter++;
        }
        return counter;
    };
}
var foo = new myFunc('{"a":99}');
out(foo.foo());
function out(s) {
    document.getElementById('out').innerHTML = '<pre>' + s + '</pre>';
}
<div id="out"></div>

正如@Nina Scholz之前指出的,我正在异步检索数据。Javascript在加载所有值之前就开始绘制dom。

这解决了我的问题:

if (document.readyState) {
  setTimeout(function() {
    var objLen = Object.keys(obj).length;
    console.log(objLen);
  }, 100);
}

我正在等待文档准备就绪,然后添加一个额外的超时作为缓冲。

相关内容

  • 没有找到相关文章

最新更新