0

此页面有示例:

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

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

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

我在想类似的东西:

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

用法:

whatFor(name,buz) {
do something here 
}
4

2 回答 2

5

我想这就是你想要的

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

然后。

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

把它弄乱- 因为,为什么不呢?

于 2013-03-16T02:56:23.453 回答
1

我真的不明白你为什么要附加whatForwindow对象上。这样做将使您的代码浏览器特定。你甚至不能在网络工作者中使用它。

这就是我要做的:

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方法可能不存在于对象的原型链中。

于 2013-03-16T03:26:14.637 回答