关于初始化器的简单问题

这是一个基本问题。抱歉。关于初始化器的简单问题

我有以下代码:

$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

回到顶部