This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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 ์—ฐ์‚ฐ์ž์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ

js
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 ์—ฐ์‚ฐ์ž๊ฐ€ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

js
class Foo {}
const foo = new Foo();
console.log(foo instanceof Foo === Foo[Symbol.hasInstance](foo)); // true

๊ธฐ๋ณธ์ ์ธ instanceof ๋™์ž‘์„ ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ƒ์„ฑ์ž์— ์žฌ์ •์˜๋œ [@@hasInstance]() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

js
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%

๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ

๊ฐ™์ด ๋ณด๊ธฐ