所以,这里有一些示例javascript代码:
Object.prototype.simpleFunction = function () {
return true;
}
var tempObject = {};
for (var temp in tempObject) {
console.log(temp);
}
请注意,如果执行此操作,您将从Google Chrome中的console.log
命令获得'simpleFunction'输出。 (我使用的是19.0.1084.46m。)
但是,各种相关的Object函数 not 传递给console.log
。
如何在Object
原型中添加函数而不将它们显示在我的“for property in
对象”循环中?
编辑:我应该提到我想要的最后一件事是在那里抛出另一个'if'语句,因为它意味着我需要将它添加到所有{{1循环。 :(
答案 0 :(得分:11)
这就是为什么你应该经常检查hasOwnProperty
:
for (var temp in tempObject) {
if (Object.prototype.hasOwnProperty(tempObject, temp)) {
console.log(temp);
}
}
Crockford主张使用Object.prototype.hasOwnProperty
代替tempObject.hasOwnProperty
,以防您在对象中覆盖hasOwnProperty
。
在ES5中,您可以将其设置为enumerable
:
Object.defineProperty(Object.prototype, 'simpleFunction', {
value: function() {
return true;
},
enumerable: false, // this is actually the default
});
或者(在ES5中),您可以使用Object.keys()
仅获取对象自己的键:
Object.keys(tempObject).forEach(function(key) {
console.log(key);
});
答案 1 :(得分:0)
你的意思是:
for (var temp in tempObject) {
if (tempObject.hasOwnProperty(temp )) {
console.log(temp);
}
}
答案 2 :(得分:0)
您可以通过执行以下操作跳过继承的属性:
if (tempObject.hasOwnProperty(temp)) {
// property didn't come from the prototype chain
}
最重要的是,你不能在没有使用in
进行迭代的情况下为原型添加函数。
您可以定义一个总是传递对象的外部接口,例如
function simpleFunction(obj) {
}
答案 3 :(得分:0)
在javascript中无法执行此操作。您需要自己过滤结果。一种可能的方法是在另一个对象中定义自己的原型属性:
var myObjectExt = {
sampleFunciton: function(){}
}
var p;
for(p in myObjectExt){
Object.prototype[p] = myObjectExt[p];
}
var obj = {};
for(p in obj){
if(myObjectExt[p])continue;
//do what you need
}