我已经尝试了以下代码,并且惊讶地发现对象中的var也返回了对象方法。 我不确定为什么会发生这种情况,对象方法本质上是属性吗? 有没有办法让它只返回包含值的属性?
var object = {p1: 1, p2: 2, p3: 3};
object.funkcja = function() {
for (var x in object) {document.getElementById("test").innerHTML += object[x] + "<BR>";}
};
示例:
答案 0 :(得分:0)
像波纹管一样检查应该有效。
for (var x in object) {
if(object.hasOwnProperty(x)){
document.getElementById("test").innerHTML += object[x] + "<BR>";
}
}
答案 1 :(得分:0)
这是因为JavaScript不会在值和方法之间产生差异。 您必须自己从值中过滤方法。 我建议你在循环中使用这个函数:How can I check if a javascript variable is function type?
for (var p in object){
if(isFunctionA(p) == false){
//Make your work on props here.
}
}
function isFunctionA(object) {
return object && getClass.call(object) == '[object Function]';
}
答案 2 :(得分:0)
是的,对象的方法只是碰巧是函数的属性。您可以使用
测试属性是否为函数 if(typeof object[x] === 'function')
或
if(object[x] instanceof Function)
我相信instanceof运算符效率稍高,但如果你有多个全局上下文有效(例如,如果你在不同的帧之间传递对象),它可能无法工作。
值得注意的是,for in循环将返回在对象原型上定义的属性及其实例属性。为避免这种情况,您可以使用
if(object.hasOwnProperty(x))
答案 3 :(得分:0)
我认为这是正确的方法:
for (var x in object) {
if(object.hasOwnProperty(x) && !(object[x] instanceof Function) ){
document.getElementById("test").innerHTML += object[x] + "<BR>";
}
}