这是一个基本问题。遗憾。
我有以下代码:
$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的值时,我看到已初始化的变量,但为什么?我在哪里设定b的值?我把它作为参数传递给我。我认为b的值必须是'null'或其他东西。
答案 0 :(得分:1)
当您将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});
来抑制所有输出。
答案 1 :(得分:0)
如果在该方法中设置断点,则在运行该方法之前不会命中该断点,即在解析定义时但在创建对象时不会。此时,如果设置了b
,您可能正在传递参数。
所以,换句话说再说一遍:当你定义上传器时,断点不会被击中。稍后在创建实例时会出现这种情况。