javascript - 定义哪个方法可以被链接

标签 javascript node.js prototype chaining

我通过使用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();

所以,如果 tempobj 相同当你 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/

相关文章:

javascript - 在 jQuery 中扩展 $fn 命名空间

javascript - 如何检查是否所有单选按钮均已选中

javascript - 你如何关闭javascript中的窗口?

javascript - 显示位于文件夹中的文件并在下拉列表中显示它们以供使用 javascript html 用于 Metro 应用程序进行选择

javascript - 如何在 KineticJS 中获取点击事件相对于其图层的位置?

node.js - 无法正确地将使用nodejs PDFKit制作的pdf附加到通过Nodemailer发送的电子邮件中

javascript - 传入数字,Number.prototype.format

javascript - 请求 promise : do promise cache the result

node.js - 无法通过 SalesForce API (JSforce) 更新自定义日期字段

javascript - 如何在 Javascript 原型(prototype)中定义重复函数?