Проверка, является ли что-то классом в javascript
Теперь, когда у нас есть собственные реализации ES6, есть «настоящие классы». Это javascript-disabled в значительной степени синтаксический vanilla-js сахар для прототипного наследования, как javascript-disabled и в случае с функциями конструктора, но javascript-library есть тонкие различия, и они .js не являются полностью взаимозаменяемыми.
Пока vanillajs что единственный способ, который ecmascript я нашел, - это получить .toString()
функции .js конструктора прототипа объекта vanillajs и проверить, начинается ли ecmascript он с class
ИЛИ есть ли у объекта vanillajs конструктор и .toString()
из который начинается javascript с class
.
Обратите внимание, что ecmascript если ваш код скомпилирован javascript-disabled (например, большинство настроек javascript-disabled Babel или TypeScript), тогда javascript-execution он вернет function...
вместо class...
во время javascript выполнения (поскольку классы javascript-execution переносятся в функции конструктора).
function isClass(obj) {
const isCtorClass = obj.constructor
&& obj.constructor.toString().substring(0, 5) === 'class'
if(obj.prototype === undefined) {
return isCtorClass
}
const isPrototypeCtorClass = obj.prototype.constructor
&& obj.prototype.constructor.toString
&& obj.prototype.constructor.toString().substring(0, 5) === 'class'
return isCtorClass || isPrototypeCtorClass
}
Это js будет работать только в собственных javascript-execution средах (Chrome, Firefox, Edge, node.js javascript-execution и т. д.), в которых реализован javascript-disabled class
для кода, который не был javascript-disabled перенесен в function
.
Использование:
class A {}
class B extends A {}
isClass(A) // true
isClass(new A()) // true
isClass(B) // true
isClass(new B()) // true
function C() {}
isClass(C) // false
isClass(new C()) // false
isClass({}) // false
isClass(Date) // false
isClass(new Date()) // false
//These cases return 'true' but I'm not sure it's desired
isClass(Object.create(A)) // true
const x = {}
Object.setPrototypeOf(x, A)
isClass(x) // true
Если vanillajs есть способ получше, я хотел .js бы знать, что это такое.
javascript
Проверка, является ли что-то классом в javascript
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.