在包装函数中自动包装动态添加的对象属性(函数)

时间:2014-02-16 14:16:08

标签: javascript jquery typeof object-literal

我使用此设置向对象添加属性:

var obj = {
    extend: function(key, obj){
        this[key] = obj;
    }
}

这很有效。但是,在某些情况下,我想将子对象添加为属性:

obj.extend('new', {
    test: function(){
        console.log('test called');
    }
});

我想在一个函数中自动将传递的对象中的所有函数(作为第二个参数)包装到obj.extend()函数中,该函数本身包含$(document).ready(function(){})

中函数的实际调用

我的方法是:

extend: function(key, obj){
    for(var prop in obj){
        if(typeof prop == 'function') {
            console.log(prop + ' is a function'
        } else 
            console.log(prop + ' is NOT a function');
        }
    }
    this[key] = obj;
}

typeof prop似乎返回string而不是'功能'。我检查了各种文章和帖子,但方法是:

typeof propertyOfObject == 'function' 

似乎完全有效。

我在这里做错了什么?为什么typeof propertyOfObject给我'字符串'?如何检查prop是否为函数?

1 个答案:

答案 0 :(得分:3)

因为你只是迭代Object keys,而不是它的属性。

您需要完全限定该属性才能访问它:

if( typeof obj[ prop ] === 'function' ) { }
相关问题