gpt4 book ai didi

javascript - 如何检查一个方法是否在 JavaScript 类中定义

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:58 26 4
gpt4 key购买 nike

我需要检查类定义是否通过继承提供特定方法。我是否需要遍历原型(prototype)链才能完成此任务?

function TestClass(config){
//NOTE: cannot instantiate class because if config not valid Error is thrown
}
TestClass.prototype.sampleMethod = function(){};

function isDefined(klass){
console.log(typeof klass.sampleMethod); //'undefined'
console.log('sampleMethod' in klass); //false
console.log(klass['sampleMethod']); //undefined

console.log(typeof klass.prototype.sampleMethod); //'function' ...inheritance?
}

isDefined(TestClass);

最佳答案

我认为问题可能是你无法检测一个类是否直接实现了某些东西而不查看类的实例,除非你专门将它的一个实例分配给新类的原型(prototype)以进行检查。请记住,当您的类的原型(prototype)被赋予属性 sampleMethod 时,它是一个代表原型(prototype)的实例对象,而不是一个类。事实上,类在 JavaScript 中并不真正存在。

function TestClass(config){}
TestClass.prototype.sampleMethod = function(){};

function isDefined(klass){
var holder, _defined = false;
try{
holder = new klass({});
_defined = typeof holder.sampleMethod !== 'undefined'; // does the prototype lookup for you
}catch(e){
console.log('Error loading class for reasons other than invalid method.', e)
}finally{
return _defined;
}
}

关于javascript - 如何检查一个方法是否在 JavaScript 类中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com