JavaScript中的任意对象方法和属性

sli*_*khi 5 javascript object

我确信之前已经得到了明确的回答,我试图搜索它......也许我的搜索条件错了......

基本上我有一个对象myObject,我有一组已定义的属性和方法.我想要做的是能够处理我尚未定义的属性和方法的调用/引用.

例如,假设我有这个:

var myObject = {
  someProperty : 'foobar',
  someFunction : function () { /* Do stuff */ }
}
Run Code Online (Sandbox Code Playgroud)

目前,如果有人试图打电话myObject.someOtherFunction(),JavaScript会对此大吼大叫.我想要做的是设置一种自动处理它的方法.因此,例如,我的对象只返回false,而不是JavaScript抛出错误.这可能吗?

另一种看待它的方法是:

var myObject = {
  someFunction : function () { /* Do stuff */ }
  magicBucket : function () { /* Do stuff */ }
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话myObject.someFunction(),那就是定义并做某事.我想要发生的是,如果我要调用myObject.someOtherFunction(),而不是JavaScript抛出错误,它会调用myObject.magicBucket().

原因是我有一个客户端在他们的网站上使用第三方库.他们想停止使用它,但完全删除它需要花费大量的时间和精力.因此,作为一个短期解决方案,他们想知道我是否可以创建一个基本上什么都不做的虚拟文件.好吧,这个库使用了几个有很多方法的对象.我可以通过一切并制作虚拟对象,但我想也许可能有一些简单的"全能"方法来做到这一点.

有些人提到检查方法是否存在,将其包装在条件或try..catch等等.嗯,这一点是我此时无法触及对方法的实际调用.由于总体目标是最终完全删除编码,因此它甚至不适用.

Pau*_*aul 2

不,JavaScript 中不能有任意的 getter。您可以在调用函数之前测试该函数是否存在,以防止出现错误:

if (myObject.someOtherFunction)
    myObject.someOtherFunction();
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,如果您不知道它一定是一个函数:

if (typeof myObject.someOtherFunction == 'function')
    myObject.someOtherFunction();
Run Code Online (Sandbox Code Playgroud)