th)
    5. [ ` Function: name ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name)
    6. [ ` Function: prototype ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype)
  9. Methods 
    1. [ ` Function.prototype[@@hasInstance]() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/@@hasInstance)
    2. [ ` Function.prototype.apply() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)
    3. [ ` Function.prototype.bind() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)
    4. [ ` Function.prototype.call() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)
    5. [ ` Function.prototype.toString() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString)
  10. [ ` Object ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
  11. Properties 
    1. [ ` Object.prototype.constructor ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor)
    2. [ ` Object.prototype.__proto__ ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto) Deprecated 
  12. Methods 
    1. [ ` Object.prototype.__defineGetter__() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__) Deprecated 
    2. [ ` Object.prototype.__defineSetter__() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__) Deprecated 
    3. [ ` Object.prototype.__lookupGetter__() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__) Deprecated 
    4. [ ` Object.prototype.__lookupSetter__() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__) Deprecated 
    5. [ ` Object.prototype.hasOwnProperty() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty)
    6. [ ` Object.prototype.isPrototypeOf() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf)
    7. [ ` Object.prototype.propertyIsEnumerable() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable)
    8. [ ` Object.prototype.toLocaleString() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString)
    9. [ ` Object.prototype.toString() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString)
    10. [ ` Object.prototype.valueOf() ` ](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf)

##  In this article

  * Description 
  * Constructor 
  * Instance properties 
  * Instance methods 
  * Examples 
  * Specifications 
  * Browser compatibility 
  * See also 

#  WeakRef

A **` WeakRef ` ** object lets you hold a weak reference to another object,
without preventing that object from getting garbage-collected.

##  Description

A ` WeakRef ` object contains a weak reference to an object, which is called
its _target_ or _referent_ . A _weak reference_ to an object is a reference
that does not prevent the object from being reclaimed by the garbage
collector. In contrast, a normal (or _strong_ ) reference keeps an object in
memory. When an object no longer has any strong references to it, the
JavaScript engine's garbage collector may destroy the object and reclaim its
memory. If that happens, you can't get the object from a weak reference
anymore.

Because [ non-registered symbols ](/en-
US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry)
are also garbage collectable, they can also be used as the target of a `
WeakRef ` object. However, the use case of this is limited.

###  Avoid where possible

Correct use of ` WeakRef ` takes careful thought, and it's best avoided if
possible. It's also important to avoid relying on any specific behaviors not
guaranteed by the specification. When, how, and whether garbage collection
occurs is down to the implementation of any given JavaScript engine. Any
behavior you observe in one engine may be different in another engine, in
another version of