Javascript对象模型

时间:2017-10-11 09:45:35

标签: javascript jquery

我有几个关于Javascript对象如何工作的问题。

我知道Javascript通过继承工作。但有些事我无法理解

首先,当我们在javascript中挖掘一些对象时,碰巧我们发现并非所有对象属性。但是当我们创建自己的对象时,调试会显示所有内容。

例如,Bootstrap Dropdown对象将显示:

$(".dropdown").dropdown()
(9) [li.dropdown.active, li.dropdown.test, a#addConsumption.dropdown.toggle, li.dropdown.dropdown-accordion, a#addConsumption.dropdown.toggle, li.dropdown, a#addTemperature.dropdown.toggle, li.dropdown, a#addPresence.dropdown.toggle, prevObject: r.fn.init(1)]

$(".dropdown").data("bs.dropdown")
Dropdown {}__proto__: Object

当MyObject对象输出以下内容时:

DropdownAccordion {accordions: Array(0), component: r.fn.init(1), dropdown_menu: r.fn.init(1), menu_panel_group: r.fn.init(1)}

property1 : [] property2 : [div.panel-group,prevObject:r.fn.init(1)] 的 : 对象

所以这是如何工作的?

并且,例如在Bootstrap中,如何将类似“。dropdown”的类实例化?事实上,我通过dropdown.js挖掘并试图找到实例化的时间,但它永远不会发生。所以也许还有另一个我不知道存在的Javascript实例化概念。

// This section appear to never happen, unless we instantiate like "$(selector).dropdown()
function Plugin(option) {
    return this.each(function () {
      var $this = $(this)
      var data  = $this.data('bs.dropdown')

      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
      if (typeof option == 'string') data[option].call($this)
    })
  }

1 个答案:

答案 0 :(得分:0)

打印到控制台的数组是HTMLCollection(或jQuery Collection),基本上是HTMLElements的列表。当您将它们放在控制台中时,浏览器会以不同的方式格式化输出,这样当您将鼠标悬停在输出元素上方时,它们也会在DOM中标记,就像您要检查它们一样。但是,您仍然可以使用$(".dropdown").__proto__获取类的原型方法。

关于你的第二个问题:通常这些在DOM中生成新html元素的元素是从javascript渲染的,所以你应该在代码中找到一些东西,也许不在dropdown.js中。