如何在访问之前确定是否定义了吸气剂?

Pac*_*man 1 ecmascript-6

我在JS中有一组get函数,例如:

get UserName() {
    return this.userModel.Name;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在调用该函数之前检查该函数是否存在。我试过了:

if (this.UserName == 'function')...
Run Code Online (Sandbox Code Playgroud)

但它始终为false,因为它userModel.name是一个字符串,typeof UserName返回的是“字符串”类型,而不是“函数”。

你知道我怎么能做到这一点吗?

4ca*_*tle 5

检查UserName存在(不调用getter)的一种简单方法是使用in

if ('UserName' in this) {
    // this.UserName is defined
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更严格的检查来直接访问getter函数,请使用Object.getOwnPropertyDescriptor

var userNameDesc = Object.getOwnPropertyDescriptor(this, 'UserName');
if (userNameDesc && userNameDesc.get) {
    // this.UserName is definitely a getter and is defined
}
Run Code Online (Sandbox Code Playgroud)