我通过使用return this;
创建了一个支持链接的类,并且
现在我需要让当前方法告诉哪些方法可以被链接。示例:
class MyClass {
constructor(path) {
this.path = path;
}
method1() {
// some code here...
// i must make something here to only allow channing if it's method
// blabliblu
return this;
}
blabliblu() {
// some code here...
// same thing here, if the channing is with the method ar_2, it's ok.
return this;
}
ar_2() {
// And so on...
return this;
}
}
所以,我可以做:method1().blabliblu()
,但我不能做method1().ar_2()
。有库可以帮助我实现这一目标吗?
最佳答案
你所要求的在Javascript中是不可能的。当你这样做时:
return this;
在您的方法中,您返回相同的对象。任何公共(public)方法都可以在返回的对象上调用,但无法指定,因为该对象是从方法返回的,所以它应该以某种方式不允许调用某些方法。
因此,使用示例中的代码 return this
在.method1()
,这之间没有区别:
obj.method1();
obj.ar_2();
还有这个:
obj.method1().ar_2();
这是因为链接版本本质上是 JS 解释器的内部:
let temp = obj.method1();
temp.ar_2();
所以,如果 temp
与 obj
相同当你 return this
时就是这样来自method1()
,然后obj.method1().ar_2();
与 obj.method1(); obj.ar_2();
相同(打字少一点)。因此,您无法阻止 .ar_2()
的调用。 .
两者都只需调用 .method1()
然后.ar_2()
在同一个物体上。所以你不能阻止一种方案,而只能允许另一种方案。 ar_2
要么是公共(public)方法,要么不是。您不能让它在同一对象的一个地方可调用,而在另一个地方不可调用。
现在,您可以创建 obj.method1()
返回一个不同的对象。如果您这样做,那么该不同的对象可能有不同的方法,并且可能是一个没有 .ar_2()
的对象。方法。
当您像这样链接数组方法时:
let result = [1,2,3].map(...).filter(...);
该链中的每个步骤都返回一个不同的对象(它们没有执行 return this
,而是创建一个新对象并返回它。在这个特定的数组示例中,它们返回不同的对象,但类型相同,但您可以返回不同类型的不同对象。例如:
let result = ["a","b","c"].join("").toUpperCase();
在这里,.join()
是一个数组方法,但返回一个字符串对象,然后您只能对其调用字符串方法。因此,您可以执行类似的操作,返回不同类型的对象。
关于javascript - 定义哪个方法可以被链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41602072/