2011-09-07 99 views
0

好吧,我知道这是一个愚蠢的问题,和愚蠢quesitons是最常见的最难找到答案,如每个人都认为他们只是知道。无论如何,我有这样的:如何在YUI对象包装中包装javascript对象文字?

var map = { 
    "key1" : "someValue1", 
    "key2" : "someValue2" 
}; 

然后,我正是如此列举的条目:

Y.Object.each(map, function(value,key,object) { 
    // do something; 
}); 

但我真正想要做的是一样的东西:

map = Y.Object.wrap(map); 
map.each(function(value,key,object) { 
}); 

值得一提的原始对象可能作为参数传入,所以我不会一直构造它们。换句话说,我真的想打包一个(并且如果它已经被包装,将不会双重打包)。答案可能很明显,甚至在文档中,我只是无法找到它。所以,我自己通过在googlesphere的摆布......

---------------------编辑----------- ---------

当我说总结,我想我的意思是(在YUI说吧)扩充。换句话说,我希望Y.Object方法可以直接在有问题的对象上使用。举例来说,我希望能够做这样的事情:

var map = { 
    "key1" : "someValue1", 
    "key2" : "someValue2" 
}; 
map.each(function(value,key,object) { 
    //do something with each entry in my map 
}); 

而不必总是这样做的:

var map = { 
    "key1" : "someValue1", 
    "key2" : "someValue2" 
}; 
Y.Object.each(map, function(value,key,object) { 
    //do something with each entry in my map 
}); 

有两个原因。首先,我很懒,不想继续打字Y.Object.each(myObject...当我想要的是迭代我的对象的每个属性。其次,我想向前兼容,以便当功能eachsome获得本地定义的(我认为他们已经在Firefox和Chrome),我可以利用本地实现无代码更改。我认为第二个原因是Crockford似乎强调的东西,因为他总是似乎说如果你想添加一个函数到一个Object的原型,那么这样做的方式会检查函数是否在做之前已经被定义所以。随时纠正我,如果我错了,上面的任何地方,和往常一样,随意提出一个解决方案:)

+0

我不知道你所说的“包装”的意思。你有一个例子或链接,更具体地解释你在找什么? – mjhm

回答

0

,尽我所知,YUI3没有包装功能为常规对象的作品,并添加你想要的each()他们的方法。但是,你可以把自己的像这样:

YUI().use('node', function(Y) { 

    // code to declare our new wrapper function 
    function myWrap(o) { 
     if (o instanceof myIterator) return(o); // don't double wrap 
     return(new myIterator(o)); 
    } 

    // code to declare a base class used in the iterator   
    function myIterator(o) { 
     Y.mix(this, o); 
    } 

    // the actual each() iteration function 
    myIterator.prototype.each = function(fn) { 
     var key; 
     for (key in this) { 
      if (this.hasOwnProperty(key)) { 
       fn.call(this, this[key], key, this); 
      } 
     } 
    } 

    // start of regular code that uses the new wrapper 
    var map = { 
     "key1" : "someValue1", 
     "key2" : "someValue2" 
    }; 

    var x = myWrap(map); 
    x.each(function(value, key, object) { 
     console.log(value); 
    }); 

}); 

你可以看到它在这里工作:http://jsfiddle.net/jfriend00/h7Fpp/

+0

谢谢,这很有帮助,尽管我最终选择了不同的方式。 – Lucas