一直搞不懂闭包问题,这次开发真的遇上了,求解决办法,要求各product分别展示出各自的属性

$(document).ready(function() {
    function product(name, description, price) {
        this.name = name;
        this.des = description;
        this.price = price;
    }
var product1 = new product("iphone", "手机", 3200);
    var product2 = new product("huawei", "手机", 1800);
    var product3 = new product("nicai", "手机", 998);
    var product4 = new product("sansung", "手机", 3000);
    var product5 = new product("opera", "手机", 2000);
    var products = [product1, product2, product3, product4, product5];
    for(var j=0;j<products.length;j++) {
        var pname = document.getElementsByClassName("pname")[j];
        var pdes = document.getElementsByClassName("pdes")[j];
        var pprice = document.getElementsByClassName("pprice")[j];
        for(var i=0;i<products.length;i++) {
            pname.innerHTML = products[i].name;
            pdes.innerHTML = products[i].des;
            pprice.innerHTML = products[i].price;
        }
    }
    });
阅读 2.6k
3 个回答
$(document).ready(function() {
    function product(name, description, price) {
        this.name = name;
        this.des = description;
        this.price = price;
    }
    var product1 = new product("iphone", "手机", 3200);
    var product2 = new product("huawei", "手机", 1800);
    var product3 = new product("nicai", "手机", 998);
    var product4 = new product("sansung", "手机", 3000);
    var product5 = new product("opera", "手机", 2000);
    var products = [product1, product2, product3, product4, product5];


    for(var j=0;j<products.length;j++) {
        (function (product, j) {
            var pname = document.getElementsByClassName("pname")[j];
            var pdes = document.getElementsByClassName("pdes")[j];
            var pprice = document.getElementsByClassName("pprice")[j];

            pname.innerHTML = product.name;
            pdes.innerHTML = product.des;
            pprice.innerHTML = product.price;

        })(products[j], j)
    }
});

你应该是要这个效果吧

去掉内循环,试试直接这样。

var pname = document.getElementsByClassName("pname")[j];
var pdes = document.getElementsByClassName("pdes")[j];
var pprice = document.getElementsByClassName("pprice")[j];

pname.innerHTML = products[j].name;
pdes.innerHTML = products[j].des;
pprice.innerHTML = products[j].price;

看你的代码,你是想要放进数组里面吧?

也可以这样,函数这样

function getProduct(product){

  var  getproduct  =  new  Object()
  getproduct.name=product.name
  getproduct.id=product.id
  ...
  return  getproduct
  console.log(getproduct)


好像这个叫做工厂函数,类似的语法吧,有点记不太清

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题