【发布时间】:2019-02-07 19:56:31
【问题描述】:
给定一个 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
我知道可以递归循环遍历原型链,但这将是一项昂贵的操作。
链接相关问题:
【问题讨论】:
-
您只想检查类实现自身的函数还是原型链中的所有函数?
-
如果名称匹配足够可以
Object.getOwnPropertyNames( C.prototype ).includes(fn.name). -
@LucaKiebel 一个理想的答案是检查链,但一个合适的开始就是类实现的内容。
-
如果您不知道方法名称,那么您将不得不搜索它。
-
"可以递归循环遍历原型链,但这将是一项昂贵的操作。" - 你为什么这么认为?
标签: javascript function ecmascript-6 prototype es6-class