Javascript闭包错误

Javascript closures bug

本文关键字:错误 闭包 Javascript      更新时间:2023-11-13

几天前,我被Javascript的闭包错误严重困扰,但我太忙了,没有时间问。我正在使用jQuery模板引擎尝试以下内容。

<ul id="container"></ul>
<script type="text/jq-tmpl" id="myTmpl">
  <li>
    <span style="background:#fafafa">X:${X}</span>
    <span style="background:#ababab">Y:${Inner.Y}</span>
    <span style="background:#9a9a9a">Z:${Inner.Z}</span>
  </li>
</script>
function OuterObject(x,y,z){
  this.X = x;
  this.Inner = InnerObject(y,z);
}
function InnerObject(y,z){
  this.Y=y;
  this.Z=z;
}
$(function(){
  var l=[];
  l.push(OuterObject(1,"One","inner-1"));
  l.push(OuterObject(2,"Two","inner-2"));
  $("#myTmpl").tmpl(l).appendTo("#container");
});

问题是,它显示了两个渲染项的inner-2Two。我也试过这样做:

var a=OuterObject(1,"One","inner-1");
l.push(a);
var b=OuterObject(2,"Two","inner-2");
l.push(b);

但都是一样的。

在调用构造函数时,似乎需要使用"new"。

例如new Outerobject(...)new InnerObject(...)

否则,将不会返回this对象。