使用构造函数在对象内创建对象

时间:2015-01-10 07:44:05

标签: javascript javascript-objects

在下面的代码中,我试图创建一个名为" portfolio"的对象。里面哪个 我想创建其他包含属性的对象" stockvalue"和"价格"?

var portfolio_create = function(stock,stockvalue,price)
{
    for(i in stock)
    {
        this[stock[i]] = stock[i];
        this[stock[i]]["stockvalue"] =stockvalue[i];
        this[stock[i]]["price"]=price[i]    
    }
}

var portfolio = new portfolio_create(["ibm","tcs"],[23,34],[34,45]);

var stock_market = portfolio;


alert(portfolio["ibm"]["stockvalue"]);  // undefined

为什么警报返回"未定义"而不是23?

提前做好准备。

3 个答案:

答案 0 :(得分:1)

var portfolio_create = function (stock, stockvalue, price) {

    for (var i = 0, len = stock.length; i < len; i++) {
        this[stock[i]] = {};

        this[stock[i]]["stockvalue"] = stockvalue[i];
        this[stock[i]]["price"]      = price[i];    
    }
}
var portfolio = new portfolio_create(["ibm", "tcs"], [23,34], [34,45]);
  1. 不要将for..in用于数组。
  2. this[stock[i]] = stock[i];替换为this[stock[i]] = {};.
  3. Example

答案 1 :(得分:1)

我认为对象和变量之间存在一些混淆。

您可以创建一个真正的JavaScript类组合,其中包含另一个类库的集合,其中包含2个变量值和价格。

在您的投资组合类中,您可以添加AddStock方法和GetStock。

看看JavaScript类,我想你会找到你的幸福。

吊杆

答案 2 :(得分:1)

尝试使用像下划线或lodash这样的lib来摆脱这些for循环(每个)。它更好,更实用。

稍微短一些:

这[stock [i]] = {stockvalue:stockvalue [i],price:price [i]};