Javascript 使用管道功能检查对象属性或方法

Javascript 使用管道功能检查对象属性或方法,javascript,object,properties,object-literal,Javascript,Object,Properties,Object Literal,想象一下这个简单的设置: var obj = { // Extends the object by adding another property or method extend: function(key, obj){ this[key] = obj; } } 现在我可以用这个: obj.extend('panelControl', { open: function(){}, close: function(){} }); 将按键p

想象一下这个简单的设置:

var obj = {

    // Extends the object by adding another property or method
    extend: function(key, obj){
        this[key] = obj;
    }

}
现在我可以用这个:

obj.extend('panelControl', {
   open: function(){},
   close: function(){}
});
将按键
panelControl
添加到
obj
即可

为了调用上述示例中的面板控制功能,我将执行以下操作:

obj.panelControl.open();
只要
panelControl
实际存在/已设置,它就可以正常工作。但如果不是,那么我当然会有一个例外

现在我的想法是创建一个充当管道的函数:

var obj = {

    // Definition of extend function goes here

    // Used to safely access properties or methods with regard to availability
    pipe: function(key){
        if(typeof this[key] !== 'undefined')
           return this[key];
    }

}
因此,我将呼吁:

obj.pipe('panelControl').open();
只要设置了
panelControl
,这项功能就非常有效

问题是,当未定义
panelControl
时,
pipe()
会给我一个错误:

Uncaught TypeError: Cannot call method 'open' of undefined
但这正是我试图通过这样做来避免的:

if(typeof this[key] !== 'undefined') {}
我研究了这个问题,发现了一些方法,基本上是模仿PHP的
isset()
功能:

if(key in this) {}
或:

(后者在某些IE版本中不可用)

我应用了所有这些,但仍然得到了打字错误

显然,我误解了我所写条件的行为。也许我的方法完全有缺陷。也许有更好的方法来实现我的目标

我该怎么办:

创建一个函数,就像我尝试使用
pipe()
一样,它传递调用它的对象的本地属性,但前提是该属性存在,并且取消方法链(即
obj.pipe('panelControl')。open()
,这样就不会发生异常或错误了

注意:如果有更好的方法可以做到这一点,也许它甚至不涉及我打算用
pipe()
实现的方法,或者更简单或更安全的方法,请告诉我


谢谢!

如果未设置
panelControl
,则它不应执行任何操作?正确,这将是最好的。
if(this.hasOwnProperty(key)) {}