我有几个关于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)
})
}
答案 0 :(得分:0)
打印到控制台的数组是HTMLCollection(或jQuery Collection),基本上是HTMLElements的列表。当您将它们放在控制台中时,浏览器会以不同的方式格式化输出,这样当您将鼠标悬停在输出元素上方时,它们也会在DOM中标记,就像您要检查它们一样。但是,您仍然可以使用$(".dropdown").__proto__
获取类的原型方法。
关于你的第二个问题:通常这些在DOM中生成新html元素的元素是从javascript渲染的,所以你应该在代码中找到一些东西,也许不在dropdown.js中。