【问题标题】:Access DOM Elements via their constructor properties [closed]通过其构造函数属性访问 DOM 元素 [关闭]
【发布时间】:2017-07-28 19:41:32
【问题描述】:

是否有可能通过 JavaScript 通过其构造函数(最好是HTMLElement)通过自定义属性或直接访问 DOM 元素?

类似于下面的代码:

/* Some Attribute             
    document.body.someAttribute == document.body
        (this should be true)
*/

HTMLElement.prototype.someAttribute = (function() {
    /* Return the element. */
})();

编辑

显然这就是我要问的:

Object.defineProperty(HTMLElement.prototype, "someAttribute", {
    get: function someAttribute() { return this }
});

document.body.someAttribute === document.body // -> true

【问题讨论】:

  • 不确定用例,但这里是选择 DOM 元素的方法。 developer.mozilla.org/en-US/docs/Web/API/Document/querySelector
  • “通过其构造函数访问 DOM 元素”你想用这个做什么?从我的看法来看,如果没有 DOM 元素,您将无法访问此方法,因此提供一种从自身获取自身的方法似乎是多余的,除非您尝试访问元素的属性,在这种情况下 @ 987654322@存在
  • 可能和How to add my own methods to HTMLElement object?一样,不过很难说……
  • 我不知道为什么它被关闭了。目前尚不清楚他们在问什么。很明显,他们很困惑。很明显,标题可以更改为 I 类似“如何将方法/属性添加到 DOM 元素的构造函数,以便该方法可以访问 DOM 元素”。 ...这就是为什么初学者不能在这里提问的原因。如果这个人有足够的信息来正确地提出问题,那么他们一开始就不会提出问题。
  • 这是答案,因为问题已经结束:HTMLElement.prototype.myMethod = function(){ console.log("this element", this)} 然后:let element = document.getElementById('我的元素')。然后: element.myMethod() .... 控制台会记录你的元素,或者在方法中做任何你想做的事情。

标签: javascript


【解决方案1】:

你的问题很不清楚。您的标题是“访问”,但您给出的第一个示例似乎是“测试”。 document.bodyHTMLBodyElement 的一个实例,因此是其构造函数document.body.constructor 的值,所以

document.body.constructor === HTMLBodyElement

document.body instanceof HTMLBodyElement

当然还有

document.body instanceof HTMLElement

因为HTMLBodyElementHTMLElement 的子类。

你不能从构造函数到实例;没有构造函数知道可能用它创建了哪些实例。要查找特定 HTML 元素类型的实例,请使用 document.querySelector[All](tagName)

【讨论】:

  • 谢谢,我想我只是想知道是否可以从实例中获取constructor
  • 进一步澄清我在上面的 cmets 中的回答:您不想获取构造函数本身,您想获取构造函数的方法,这些方法存储在构造函数的 .prototype 对象中。如果您将方法添加到 HTMLElement.prototype.myMethod = function(){ } ... 然后,像这样调用它 element.myMethod()
猜你喜欢
  • 2017-07-04
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2011-10-04
  • 2023-04-02
  • 2017-12-16
  • 1970-01-01
  • 2018-07-02
相关资源
最近更新 更多