Function.prototype[@@hasInstance]()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itโs been available across browsers since โจ2017๋ 4์โฉ.
Function
์ธ์คํด์ค์ [@@hasInstance]()
๋ฉ์๋๋ ์์ฑ์ ํจ์๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑ์์ ์ธ์คํด์ค ์ค ํ๋๋ก ์ธ์ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ธฐ๋ณธ ์ ์ฐจ๋ฅผ ์ง์ ํฉ๋๋ค.
์ด ๋ฉ์๋๋ instanceof
์ฐ์ฐ์์ ์ํด ํธ์ถ๋ฉ๋๋ค.
๊ตฌ๋ฌธ
func[Symbol.hasInstance](value)
๋งค๊ฐ๋ณ์
value
- :ํ๊ฐํ ๊ฐ์ฒด์
๋๋ค. ์์ ๊ฐ์ ํญ์
false
๋ฅผ ๋ฐํํฉ๋๋ค.
- :ํ๊ฐํ ๊ฐ์ฒด์
๋๋ค. ์์ ๊ฐ์ ํญ์
๋ฐํ ๊ฐ
func.prototype
์ด value
์ ํ๋กํ ํ์
์ฒด์ธ์ ์์ผ๋ฉด true
, ๊ทธ๋ ์ง ์์ผ๋ฉด false
๋ฅผ ๋ฐํํฉ๋๋ค.
value
๊ฐ ๊ฐ์ฒด๊ฐ ์๋๊ฑฐ๋ this
๊ฐ ํจ์๊ฐ ์๋ ๊ฒฝ์ฐ ํญ์ false
๋ฅผ ๋ฐํํฉ๋๋ค. this
๊ฐ ๋ฐ์ธ๋ฉ๋ ํจ์์ธ ๊ฒฝ์ฐ, value
์ ๋์ ํจ์์ ๋ํ instanceof
ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์์ธ
TypeError
-
this
๊ฐ ๋ฐ์ธ๋ฉ๋ ํจ์๊ฐ ์๋๊ณthis.prototype
์ด ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
์ค๋ช
instanceof
์ฐ์ฐ์๋ [@@hasInstance]()
๋ฉ์๋๊ฐ ์กด์ฌํ๋ฉด ์ฐํญ์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ๋ชจ๋ ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Function.prototype
์ ์์ํ๋ฏ๋ก [@@hasInstance]()
๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฐํญ์ด ํจ์์ธ ๊ฒฝ์ฐ Function.prototype[@@hasInstance]
๋ฉ์๋๊ฐ instanceof
์ ๋์์ ์ง์ ํฉ๋๋ค. ์ด ๋ฉ์๋๋ instanceof
์ฐ์ฐ์์ ๊ธฐ๋ณธ ๋์์ ๊ตฌํํฉ๋๋ค(constructor
์ @@hasInstance
๋ฉ์๋๊ฐ ์์ ๋์ ๋์ผํ ์๊ณ ๋ฆฌ์ฆ).
๋๋ถ๋ถ์ ๋ฉ์๋์ ๋ฌ๋ฆฌ Function.prototype[@@hasInstance]()
์์ฑ์ ์ค์ ํ ์ ์๊ณ ์ธ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ธ๋ฉ๋ ํจ์์ ๊ธฐ๋ณธ ๋์ ํจ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ๊ธฐ ์ํ ๋ณด์ ๊ธฐ๋ฅ์
๋๋ค. ์๋ฅผ ๋ค์ด ์ด StackOverflow ๋ต๋ณ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
์์
๊ธฐ๋ณธ instanceof ๋์์ผ๋ก ๋๋๋ฆฌ๊ธฐ
์ด ๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํ ํ์๋ ๊ฑฐ์ ์์ต๋๋ค. ๋์ ์ด ๋ฉ์๋๋ instanceof
์ฐ์ฐ์๊ฐ ํธ์ถํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฒฐ๊ณผ๋ ๋์ผํ ๊ฒ์ผ๋ก ์์ํด์ผ ํฉ๋๋ค.
class Foo {}
const foo = new Foo();
console.log(foo instanceof Foo === Foo[Symbol.hasInstance](foo)); // true
๊ธฐ๋ณธ์ ์ธ instanceof
๋์์ ํธ์ถํ๊ณ ์ถ์ง๋ง ์์ฑ์์ ์ฌ์ ์๋ [@@hasInstance]()
๋ฉ์๋๊ฐ ์๋์ง ์ ์ ์๋ ๊ฒฝ์ฐ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
class Foo {
static [Symbol.hasInstance](value) {
// ๋ง์ถค ๊ตฌํ
return false;
}
}
const foo = new Foo();
console.log(foo instanceof Foo); // false
console.log(Function.prototype[Symbol.hasInstance].call(Foo, foo)); // true
๋ช ์ธ์
Specification |
---|
ECMAScriptยฎ 2026 Language Specification # sec-function.prototype-%symbol.hasinstance% |
๋ธ๋ผ์ฐ์ ํธํ์ฑ
Loadingโฆ