---
name: "up.util.isBlank.key"
area: "API"
kind: "JavaScript property"
parent: "up.util module"
url: "https://unpoly.com/api/up.util.isBlank.key"
---
<nav aria-label="Unpoly docs">[All docs](https://unpoly.com/index.md) · [up.util module](https://unpoly.com/api/up.util.md)</nav>

# up.util.isBlank.key

This property contains the name of a method that user-defined classes may implement to hook into the [`up.util.isBlank()`](https://unpoly.com/api/up.util.isBlank.md) protocol.

## Example {#example}

We have a user-defined `Account` class that we want to use with [`up.util.isBlank()`](https://unpoly.com/api/up.util.isBlank.md):

```js
class Account {
  constructor(email) {
    this.email = email
  }

  [up.util.isBlank.key]() {
    return up.util.isBlank(this.email)
  }
}
```

> #### Note
>
> The protocol method is not actually named `'up.util.isBlank.key'`. Instead it is named after the _value_ of the `up.util.isBlank.key` property. To do so, the code sample above is using a [computed property name](https://medium.com/front-end-weekly/javascript-object-creation-356e504173a8) in square brackets.

We may now use `Account` instances with [`up.util.isBlank()`](https://unpoly.com/api/up.util.isBlank.md):

```js
let foo = new Account('foo@foo.com')
let bar = new Account('')

console.log(up.util.isBlank(foo)) // prints false
console.log(up.util.isBlank(bar)) // prints true
```

