Javascript:功能链接

Dal*_*ore 7 javascript function object node.js

解决方案:不.你不能这样做.使用&&进行链命令并完成它.

tl; dr:in random.function("blah").check(),check()如果function("blah")返回false ,如何忽略它?或者这甚至可能吗?

的背景:

好的,所以我对代码很可怕.但是我试图通过编码使我的生活变得轻松的事情来拖延.而我的勉强,我的意思是显微镜.所以基本上,我的整个项目都是基于对象和插件.(插件是包含对象的附加.js文件.例如,afk.js看起来像这样:

global.afk = function(){};
afk.check = function(){ ... };
Run Code Online (Sandbox Code Playgroud)

通过加载该js文件,我可以访问afk对象及其中的所有功能.可能效率不高,但它有效,它可以确定哪些功能更容易做到.

回到拖延位.因为我不知道加载了什么插件,在一些共享核心.js文件中,有这些条件语句:if (plugin.has("afk")) { afk.check(); };但是,我感到无聊并plugin.has()返回实际对象而不是'true',所以我可以这样做:

plugin.has("afk").check();
Run Code Online (Sandbox Code Playgroud)

它按预期工作.除非没有afk插件,否则会抛出"false has no method check"的明显错误.

就是这样.有任何想法吗?此外,如果您有任何疑虑,请告诉我.我知道我做了很多错误/效率低下的事情,而且当我弄清楚它时修复它们很好.

Nie*_*els 1

返回的对象应该具有该功能,否则会出现错误。您可以做的是创建一个始终返回的基本对象类型。当你返回它时,它有一个空函数并且不会产生错误。

就像是:

var baseObj = function(){
    this.afk = function(){
        return this;
    }
    this.check = function(){
        return false;
    }
};

var advObj = new baseObj();
advObj.afk = function(){
    // extended func
    return new baseObj();
}

var a = new advObj();
a.afk("test").check();
Run Code Online (Sandbox Code Playgroud)