嘿伙计们我刚刚浏览了modal.js的scource并且有一些关于Javascript的问题以及modal.js插件中使用的编码约定,
如果您看到line 76,请注意一致的函数是如何开始的:
this.backdrop(function () {
我是javascript的新手,我很少见到类似的东西,为什么不做以下事情:
(function () {
this.backdrop
定义的地方我看到this.$backdrop
已定义但未定义
this.backdrop
?
很明显,我有一个问题应该相对容易,但我只是想确认一下,即使我进行了一些测试,问题是这在使用原型时指出了什么。看下面的骨架代码:
+function ($) {
'use strict';
// MODAL CLASS DEFINITION
// ======================
var Modal = function (element, options) {
this.options w = options
this.$body = $(document.body)
this.$element = $(element)
this.$backdrop =
this.isShown = null
this.scrollbarWidth = 0
if (this.options.remote) {
this.$element
.find('.modal-content')
.load(this.options.remote, $.proxy(function () {
this.$element.trigger('loaded.bs.modal')
}, this))
}
}
Modal.VERSION = '3.3.2'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
Modal.DEFAULTS = {
backdrop: true,
keyboard: true,
show: true
}
Modal.prototype.checkScrollbar = function () {
}
Modal.prototype.setScrollbar = function () {
}
Modal.prototype.resetScrollbar = function () {
}
Modal.prototype.measureScrollbar = function () {
}
}(jQuery);
这将指代内部所说的例如。 Modal.prototype.measureScrollbar ??莫代尔?或者modal.prototype.setScrollbar如果我在console.log这个我得到Object {options:Object,$ body:Object,$ element:Object,isShown:false,$ backdrop:null,scrollbarWidth:17,bodyIsOverflowing:false}但是为什么我不会得到Modal.prototype.setScrollbar,Modal.prototype.resetScrollbar,Modal.prototype.measureScrollbar,即使它们是Modal的一部分。
请注意,我的主要难点在于this.backdrop(function() { })
我将不胜感激任何帮助。
谢谢。
亚历山大答案 0 :(得分:2)
为什么...... this.backdrop(function(){
因为backdrop
函数需要回调(见下文)。
在哪里定义了this.backdrop我看到了。$ backdrop定义但不是this.backdrop?
它在第186行定义为原型的一部分:
Modal.prototype.backdrop = function
这意味着当实例化模态时(例如new Modal
),创建的对象将具有backdrop
函数。这就是JavaScript原型继承的工作原理。也许请查看这篇文章的简介:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain