【问题标题】:Automatically wrapping dynamically added object properties (functions) in a wrapper function在包装函数中自动包装动态添加的对象属性(函数)
【发布时间】:2014-02-16 14:16:07
【问题描述】:

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

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 是否是一个函数?

【问题讨论】:

    标签: javascript jquery typeof object-literal


    【解决方案1】:

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

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

    if( typeof obj[ prop ] === 'function' ) { }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-10
      • 2011-12-18
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 2017-09-06
      • 2012-05-07
      • 2011-07-08
      相关资源
      最近更新 更多