获取功能对象的描述符

时间:2019-01-02 20:07:14

标签: javascript

我想了解函数对象writable的{​​{1}}值。

FUNC

访问属性时,通常使用function FUNC(){} 。但是就我而言,我不是在访问属性,而是函数对象本身。我想看看是否可以为函数对象分配新的属性(我知道一种hacking的方式,但是我对是否还有其他可用的东西很感兴趣)。

我该如何实现?

js:

Object.getOwnPropertyDescriptor(obj,prop)

2 个答案:

答案 0 :(得分:1)

  

我想了解函数对象的.subnav { background: green;display: none;}

对象没有<nav> <ul> <li> <div id="discover" class="nav-category"> <span>Discover</span> <p> SVG here </p> <div class="subnav"> <p> IMG here </p> <p class="close">X</p> </div> </div> </li> <hr> <li> <div id="watch" class="nav-category"> <span>Watch</span> <p> SVG here </p> <div class="subnav"> <div class="column"> Original Series </div> <div class="column"> Trending Videos </div> <p class="close">X</p> </div> </div> </li> </ul> </nav>值。只有个别属性是可写还是不是可写writable属性属性(属于 property描述符的一部分)。

  

我想看看是否可以为函数对象分配新属性

您可以在对象可扩展时为其添加新属性。您可以使用Object.isExtensible进行检查。

答案 1 :(得分:0)

我将假设问题是:“如何使用Object.getOwnPropertyDescriptor(obj,prop)获取函数对象并为其分配新属性?” 自functions are objects in javascript起,有几种方法可以做到这一点。

您可以使用功能对象的名称-但不调用它来获取功能对象本身。即function func() { // code }的对象将通过func变量(函数在声明时分配的变量)进行访问。正如@Mark Meyer所说,您可以使用func.yourProperty = whateverValue分配属性。

如果必须使用Object.getOwnPropertyDescriptor(obj,prop)获取对象,则可以使用Object.getOwnPropertyDescriptor(func, "prototype")。它将返回如下内容:

{
    configurable: false
    enumerable: false
    value: Object { … }
    writable: true
    <prototype>: Object { … }
}

您的函数将位于valuevalue.constructor属性下。

另一种分配属性的方法(@Mark Meyer声明的方法除外)是Object.assign。您可以像这样使用它来为该函数分配新属性:

func = Object.assign(func, { yourProperty: yourValue })

注意:您必须重新分配函数变量,才能在调用Object.assign()之后保留新属性。