关于初始化器的简单问题
这是一个基本问题。抱歉。关于初始化器的简单问题
我有以下代码:
$extend(ImageCrop, Options.prototype); Swiff.Uploader = new Class({
Extends: Swiff,
Implements: Events,
options: {
path: "Swiff.Uploader.swf",
target: null,
zIndex: 9999,
height: 30,
width: 100,
callBacks: null,
params: {
wMode: "opaque",
menu: "false",
allowScriptAccess: "always"
},
typeFilter: null,
multiple: true,
queued: true,
verbose: false,
url: null,
method: null,
data: null,
mergeData: true,
fieldName: null,
fileSizeMin: 1,
fileSizeMax: null,
allowDuplicates: false,
buttonImage: null,
policyFile: null,
fileListMax: 0,
fileListSizeMax: 0,
instantStart: false,
appendCookieData: false,
fileClass: null
},
initialize: function (b) {
this.addEvent("load", this.initializeSwiff, true).addEvent("select", this.processFiles, true).addEvent("complete", this.update, true).addEvent("fileRemove", function (e) {
this.fileList.erase(e)
} .bind(this), true);
this.setOptions(b);
if (this.options.callBacks) {
Hash.each(this.options.callBacks, function (f, e) {
this.addEvent(e, f)
}, this)
}
this.options.callBacks = {
fireCallback: this.fireCallback.bind(this)
};
var d = this.options.path;
if (!d.contains("?")) {
d += "?noCache=" + $time()
}
...............................
,当我在this.setOptions(b);
设置断点,看b varible的价值我看到已经初始化varible但为什么呢?我在哪里设定b值?我只是将它作为参数传递。我认为b的价值必须是'空'或什么的。
回答:
当你使用Options类作为一个mixin时,它所做的只是一个$merge()
的this.options
,其参数在this.setOptions()
上传递。 initialize
作为构造函数,并且mootools中的常规做法是将选项对象传递给它。
这里是一个例子类:
var foo = new Class({ Implements: [Options],
// set defaults.
options: {
foo: "bar",
log: true
},
initialize: function(options) {
this.report(); // "bar"
this.setOptions(options); // merge argument options with this.options
this.report(); // whatever the value of options.foo was
},
report: function() {
if (this.options.log)
console.log(this.options.foo);
}
});
// this will output bar and then test.
new foo({foo:"test"}).report();
它允许您使用设置/数据的实例可以覆盖默认填充您的类的实例。例如,您也可以通过new foo({log: false});
来抑制所有输出。
回答:
如果您在该方法中设置了断点,那么在您运行该方法之前它不会被命中,即不是在解析定义时,而是在创建对象时。此时,如果设置了b
,您可能会传递参数。 所以,换句话说:当你定义你的上传器时,断点不会被命中。稍后创建实例时会触发它。
以上是 关于初始化器的简单问题 的全部内容, 来源链接: utcz.com/qa/258864.html