【发布时间】:2017-03-19 09:30:59
【问题描述】:
我知道我的标题可能不是很清楚,我会尽力解释我想要实现的目标。
我知道修改原型通常是不受欢迎的,并且有充分的理由,所以我试图找出一种方法来做到这一点,而不会在原型中添加超过一个项目。
我知道我可以简单地按照
Object.prototype.collection = {};
Object.prototype.collection.method1 = function(){ . . . };
Object.prototype.collection.method2 = function(){ . . . };
Object.prototype.collection.method3 = function(){ . . . };
etc.
然后每当我想使用我可以调用的方法之一时
objectInstance.collection.method1();
这样做的问题在于,最终它会变得非常冗长乏味,更不用说如果你从这个集合中调用一百个方法,那么“集合”这个词一百次是多余的并且浪费字节。
所以我希望有一种以这种方式创建方法的技术,而不必每次都编写完整的路径。即我可以写
objectInstance.method1();
它会知道去哪里找。
此时我的想法是,显然调用后者会引发method does not exist 错误。但我很好奇是否有任何方法可以拦截这个错误?
例如,在 PHP 中有一个 spl_autoload_register() 函数,当一个类没有被定义时,它会被调用,允许你做任何必要的事情来加载/定义它。有没有针对这种情况的等效策略?
也许我可以添加一个辅助“后备”方法,如下所示:
Object.prototype.fallback = function( undefinedMethod ){
if(this.collection.undefinedMethod){
this.collection.undefinedMethod();
}
};
每次未定义方法时都调用它,传入方法。
任何关于这些方面的帮助,或者如果可能的话,将不胜感激。
【问题讨论】:
-
我将对此进行更多研究,但它看起来正是我所需要的!非常感谢!
-
只要确保您的主机支持这一点,它就可以满足您的需求。让我知道这是否适合您,我可以将其发布为答案。
-
我做了一些研究,是的,代理正是我需要做的事情!感谢上帝的 ES6!您是否知道任何用于支持 Internet Explorer 的 polyfills 或 hack?我会自己找一些,但我想我会先问。当然,如果您将此作为答案,那么我很乐意将其标记为已接受的答案。
-
据我记忆,在 IE 下 polyfill 有一些问题。
标签: javascript methods prototype fallback spl-autoload-register