ES6检测函数是否在类实例的原型链上

Bri*_*unt 5 javascript prototype function ecmascript-6 es6-class

鉴于ES6课程:

class C {
  x () { }
  fnIsMethodOfC (fn) { return /* ? */ }
}
Run Code Online (Sandbox Code Playgroud)

以及各种功能

function y () {}
z = () => {}
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法来确定函数是否是C的方法

c = new C()
c.fnIsMethodOfC(c.x) === true
c.fnIsMethodOfC(C.prototype.x) === true
c.fnIsMethodOfC(y) === false
c.fnIsMethodOfC(z) === false
Run Code Online (Sandbox Code Playgroud)

我知道可以递归循环遍历原型链,但这将是一项昂贵的操作.

链接相关问题:

Bri*_*unt 0

一种选择可能是:

class C {
  fnIsMethodOfC (fn) {
    const proto = Object.getPrototypeOf(this)
    return proto && proto[fn.name] === fn
  }
}
Run Code Online (Sandbox Code Playgroud)