javascript - ES6 检测函数是否在类实例的原型(prototype)链上

标签 javascript function ecmascript-6 prototype es6-class

给定一个 ES6 类:

class C {
  x () { }
  fnIsMethodOfC (fn) { return /* ? */ }
}

以及各种函数如

function y () {}
z = () => {}

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

c = new C()
c.fnIsMethodOfC(c.x) === true
c.fnIsMethodOfC(C.prototype.x) === true
c.fnIsMethodOfC(y) === false
c.fnIsMethodOfC(z) === false

我知道可以通过原型(prototype)链递归循环,但那将是一项昂贵的操作。

链接相关问题:

最佳答案

一个选项可能是:

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

关于javascript - ES6 检测函数是否在类实例的原型(prototype)链上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138232/

相关文章:

javascript - 谷歌闭包编译器高级 : remove code blocks at compile time

javascript - 如何使用jquery获取选定选项卡的id

javascript - 使用 Redux Reducer 的 Immunity Helper 迭代数组并更改特定属性

postgresql - 如何传递 ENUM 变量作为 POSTGRESQL 函数的输入

javascript - 如何简化创建一个对象数组,其中除了一个所有属性都相同?

javascript - 如何使用 .map 重新格式化将 php 数组转换为 js 数组

javascript - 如何在 handlebars.js 模板中使用 getter?

javascript - 如何有效地列出超矩形边缘?

function - Fortran 中模块、子例程和函数的正确使用

javascript - 一个在javascript中找到数组最大值的函数?