0

我知道我的标题可能不是很清楚,我会尽我所能解释我想实现的目标。Javascript,对象原型 - 避免写完整路径

我知道修改的原型是在一般皱着眉头,并有很好的理由,所以我试图找出一种方法来做到这一点,不添加任何多个项目的原型。

我知道,我可以简单地做一些沿

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(); 

    } 
}; 

,只是有这个所谓的每一次的方法是不确定的,传递的方法。

任何沿着这些线的任何帮助,或者如果它甚至可能,将不胜感激。

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy –

+0

我要去一个例子看看更多,但它看起来正是我需要的!非常感谢! –

+0

只要确保你的主机支持这一点,它应该做你需要的。让我知道如果这适合你,我可以发布这个答案。 –

回答

1

不要做那样的奇怪事情。如果你想这样做的好方法,不要污染你不拥有的物体。只需创建您自己的构造函数。

class MyClass { 
    method1(){ . . . }; 
    method2(){ . . . }; 
    method3(){ . . . }; 
} 

那么您的方法将可用于MyClass实例。

如果你想用你的所有Object实例的方法,那么,你需要污染Object.prototype。你问的解决方法,但他们基本上会有同样的问题。

如果你定义你的方法不枚举,这样,他们将不会出现在for-in环路这可能不是什么大问题。

Object.prototype.method1 = function(){ . . . }; 
Object.defineProperty(Object.prototype, 'method1', {enumerable:false}); 
+0

虽然这只是我的观点,但我做不到。为了长度的缘故,我没有在我的问题中加入这个,但其重点是能够为我制作的一系列插件创建自定义后端/框架。而且我也想让这个框架可供其他人在上面构建。再次,为了长度,只要知道我有充分的理由不使用任何其他框架。我想避免类似Jquery的问题,不能在未使用框架声明的变量上使用自定义方法,这就是为什么我不会采用这种方式。尽管如此,我感谢你的洞察力和时间 –