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)) {}