in语句的自定义

时间:2013-03-16 02:51:13

标签: javascript

This page有例子:

for (var name in buz) {
   if (buz.hasOwnProperty(name)) {}
}

防止在原型中看到事物。这个hack使得“for in”语句在JavaScript中几乎无用。目前的建议是不要使用“for in”。

问:是否可以编写自定义“for in”函数,该函数自动包含if(buz.hasOwnProperty(name)){}条件?

我想的是:

window.whatFor = function(variable,object) {
   for (var variable in object) [
      if (object.hasOwnProperty(variable) {
         do something here
      }
   }
}

用法:

whatFor(name,buz) {
do something here 
}

2 个答案:

答案 0 :(得分:5)

我认为这就是你想要的

window.whatFor = function(obj,funct) {
   for (var v in obj) {
      if (obj.hasOwnProperty(v)) {
         funct(v);
      }
   }
}

然后

whatFor(sam, function (x) { alert(x); } );

Fiddle it up - 因为,为什么不呢?

答案 1 :(得分:1)

我真的不明白为什么要将whatFor附加到window对象。这样做会使您的代码浏览器具体化。您甚至无法在网络工作者中使用它。

这就是我要做的事情:

var global = typeof global !== "undefined" ? global :
             typeof self !== "undefined" ? self : this;

global.whatFor = whatFor;

function whatFor(object, callback) {
    var hasOwn = {}.hasOwnProperty.bind(object);

    for (var property in object)
        if (hasOwn(property))
            callback(property);
}

您可能已经注意到,我没有打电话给object.hasOwnProperty(property),而是拨打hasOwn(property)。这是因为hasOwnProperty方法可能不存在于对象的原型链中。

相关问题