这个JavaScript模式是如何工作的:Namespaced构造函数

时间:2013-03-20 10:51:30

标签: javascript design-patterns

我无法理解这个操作:

tmp.setAttribute(i, prop[i]);

在这个for循环中完成。 prop-array如何创建2个参数。据我所知,var = i只是一个变量吗?但显然它就像这样成为方法中的1:st参数?

感谢您的时间。

http://jsbin.com/ozoqob/2/edit

var MYAPP = MYAPP || {}; 

MYAPP.dom = {};
   MYAPP.dom.Element = function(type, prop){
     var tmp = document.createElement(type);
     for (var i in prop) {
       tmp.setAttribute(i, prop[i]);
       /*
       WHAT I DONT UNDERSTAND IS HOW THIS FOR-LOOP DIVIDE THE ARRAY IN TWO ARGUMENTS?? BEACAUSE 'I' IS JUST A VARIABLE WHICH IS USED TO LOOP THRU THE ARRAY BUT APPARENTLY NOT RIGHT?
       */
       console.log(i); // how? is this arguments divided?
       console.log(prop[i]);
     }
  return tmp; 
   };

var el1 = new MYAPP.dom.Element(
       'a',
       {href:'http://phpied.com'}
   );

console.log(el1);

2 个答案:

答案 0 :(得分:1)

2个概念:

  1. JavaScript中的每个对象都是一个哈希表,因此您可以通过密钥访问其属性值,例如obj[key];
  2. JavaScript中的for-in循环循环目标对象中的键(而不是循环值)
  3. 在您的代码中,for (var i in prop)循环对象prop中的所有键,并将每个键存储在i中。因此,对于每个键i,您可以通过prop[i]获取其值。

答案 1 :(得分:0)

将对象作为方法的第二个参数传递。然后使用for...in循环枚举该对象的属性。在循环的每次迭代中,i将引用对象属性的标识符,因此prop[i]将引用该属性的值:

var prop = {
    prop1: "value1",
    prop2: "value2"
};

for (var i in prop) {
    console.log(i); // "prop1", "prop2"
    console.log(prop[i]); // "value1", "value2"
}

此行为已解释为in the spec,如果您在上面的示例中假设Pi,则会对此行进行总结:

  

P obj 的下一个属性的名称,其[[Enumerable]]属性为true。