给出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
我知道可以递归地遍历原型链,但这将是一项昂贵的操作。
链接相关问题:
答案 0 :(得分:0)
一个选项可能是:
class C {
fnIsMethodOfC (fn) {
const proto = Object.getPrototypeOf(this)
return proto && proto[fn.name] === fn
}
}
答案 1 :(得分:0)
class C {
fnIsMethodOfC (fn) {
if(!fn || !fn.name) return false;
return !!this[fn.name] && fn === this[fn.name];
}
}
如果实际功能不同,这还将添加其他检查。